Java List转byte[]的方法
先做一个试验:
Test.java
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List lst = new ArrayList();
for (int i = 0; i < 100; i++) {
lst.add(i);
} System.out.print(lst.toString());
} } 得到结果:列出了所有的数字
[0, 1, 2, 3, 4, 5, 6。。。
进一步进行改进:
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List lst = new ArrayList();
for (int i = 0; i < 100; i++) {
lst.add(new BlockData(i,i));
} System.out.print(lst.toString());
} /**
* 定义一个乱七八糟的class
* @author cc
* */
public static class BlockData {
public int version;
public int count;
public List list;
public BlockData(int version, int count) {
this.version = version;
this.count = count;
this.list = new ArrayList(count);
}
public BlockData(int version, int count, List list) {
this.version = version;
this.count = count;
this.list = list;
} }
} 运行后的结果:
[test.Test$BlockData@1bc4459, test.Test$BlockData@12b6651, …
从后面一个例子看到的object在toString的时候,对象只是一个串了,要想再恢复成object不可能了。54chen曾想把list.toString.getBytes,被证明是不靠谱的做法。
而要想把一个list变成byte[]在网络上传输,看下面的代码:
public void encode(OutputStream os) throws IOException {
List list = data.list;
if (list != null && list.size() > 0) {
for (NuclearStorageValue value : list) {
// 依次写入每条数据的长度和数据内容
byte[] bytes = value.toByteArray();
os.write(int2bytes(bytes.length));
os.write(bytes);
} }
}
public byte[] int2bytes(int val) {
byte[] b = new byte[4];
b[0] = (byte) (val » 24);
b[1] = (byte) ((val « 8) » 24);
b[2] = (byte) ((val « 16) » 24);
b[3] = (byte) ((val « 24) » 24);
return b;
}
原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
Posted by 54chen java