坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

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<Integer> lst = new ArrayList<Integer>();
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<BlockData> lst = new ArrayList<BlockData>();
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<String> list;

public BlockData(int version, int count) {
this.version = version;
this.count = count;
this.list = new ArrayList<String>(count);
}

public BlockData(int version, int count, List<String> 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<NuclearStorageValue> 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]
本文链接: http://www.54chen.com/java-ee/java-list-transferred-byte-method.html

This entry was posted in java and tagged , . Bookmark the permalink.

1 Response » to “java List转byte[]的方法”

  1. 古道西风 说:

    汗啊!!!!!!!!!!!

Leave a Reply