首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteArrayOutputStream:奇怪的行为

ByteArrayOutputStream:奇怪的行为
EN

Stack Overflow用户
提问于 2015-04-05 06:08:11
回答 1查看 56关注 0票数 0

我正在编写一个简单的客户机-服务器应用程序,我希望能够获取Header类的属性,将它们转换为byte[],将它们发送到另一个主机,然后将它们转换回易于解析的Header。我使用ByteArrayOutputStream来做这件事,但是结果并不是我所期望的。例如,为了在main()中测试它,我有:

代码语言:javascript
复制
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()看起来像:

代码语言:javascript
复制
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)构造函数:

代码语言:javascript
复制
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)。

维奥拉,纠正结果。

这里发生什么事情?

EN

回答 1

Stack Overflow用户

发布于 2015-04-05 06:15:08

OutputStream.write(int)写入单字节。请参阅Javadoc。如果希望编写更宽的值,则必须使用DataOutputStream,writeXXX()方法和DataInputStream的相应readXXX()方法来读取它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29451911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档