我正在编写一个简单的客户机-服务器应用程序,我希望能够获取Header类的属性,将它们转换为byte[],将它们发送到另一个主机,然后将它们转换回易于解析的Header。我使用ByteArrayOutputStream来做这件事,但是结果并不是我所期望的。例如,为了在main()中测试它,我有:
Header h = Header();
h.setSource(111);
h.setDest(222);
h.setSeq(333);
h.setAck(444);
byte[] header = Header.convertHeaderToByteArray();
Header newHeader = new Header(headerArray);其中convertHeaderToByteArray()看起来像:
public byte[] convertHeaderToByteArray() {
byte[] headerArray;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(44);
byteStream.write(srcPort);
byteStream.write(dstPort);
byteStream.write(seqNum);
byteStream.write(ackNum);
byteStream.write(controlBits);
headerArray = byteStream.toByteArray();
return headerArray;
}和头(HeaderArray)构造函数:
public Header(byte[] headerArray) {
ByteArrayInputStream header = new ByteArrayInputStream(headerArray);
srcPort = header.read();
dstPort = header.read();
seqNum = header.read();
ackNum = header.read();
}这肯定没有像预期的那样表现。当我在最后查看这些值时,srcPort是正确的(111),dstPort是正确的(222),seqNum不正确(77),ackNum不正确(188)。
维奥拉,纠正结果。
这里发生什么事情?
发布于 2015-04-05 06:15:08
OutputStream.write(int)写入单字节。请参阅Javadoc。如果希望编写更宽的值,则必须使用DataOutputStream,的writeXXX()方法和DataInputStream的相应readXXX()方法来读取它们。
https://stackoverflow.com/questions/29451911
复制相似问题