gpt4 book ai didi

java - ByteArrayOutputStream:奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 11:41:58 25 4
gpt4 key购买 nike

我正在编写一个简单的客户端-服务器应用程序,我希望能够获取 Header 类的属性,将它们转换为 byte[],将它们发送到其他主机,然后将它们转换回很容易解析标题。我使用 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;
}

以及 Header(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)。

经过几个小时的阅读和修改后,我无法得到正确的结果,所以我尝试使用 ByteBuffer 代替。中提琴,正确的结果。

这是怎么回事?我阅读了两者的文档,尽管我发现了一些差异,但我没有看到错误的根源是什么。

最佳答案

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

关于java - ByteArrayOutputStream:奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com