如何从Socket读取字节流

时间:2016-03-12 23:53:19

标签: java sockets

下面是我的字节流的快照,前4个字节是幻数,接下来两个字节是有效负载的长度,其余是有效负载。

如何读取此字节流? 编码是“UTF-16BE”

01:0c:00:00:01:08:00:2f:00:75:00:74:00:69:00:6c:00:69:00:74:00:69:00:65:00:73:00:2f:00:65:00:6c:00:65:00:63:00:74:00:72:00:69:00:63:00:69:00:74:00:79:00:2f:00:7a:00:5f:00:37:00:30:00:62:00:33:00:64:00:35:00:31...More bytes

1 个答案:

答案 0 :(得分:-1)

我会这样:

1)有一种从流中读取预设字节数的方法:

private byte[] read(int size) throws IOException {
    byte[] result=new byte[size];
    for (int index=0;index<size;index++) {
        result[index]=in.readByte();
    }
    return result;
}

2)你需要一种方法来重建长度标记的2个字节 - 我假设这是一个PC字节顺序,即LSB - MSB:

private int byteArrayToWord(byte[] value) {
    int ret = ((value[0] & 0xFF) ) | ((value[1] & 0xFF) << 8);

    return ret;
}

3)然后阅读你的东西:

byte[] magic=read(4);
int len=byteArrayToWord(read(2));

String response=new String(read(len),StandardCharsets.UTF_16); // check the actual charset

请注意字符串构造函数,它允许您使用给定的编码从字节数组创建字符串。这是我猜的唯一非常棘手的部分:)