gpt4 book ai didi

java - 为什么我通过 TCP 发送的文件包含的数据比它本身包含的文件多?

转载 作者:行者123 更新时间:2023-12-04 15:15:16 30 4
gpt4 key购买 nike

我一直在尝试通过 TCP 向我的一位同事发送文件,并检查文件是否正确到达。我们已经成功发送了简单的 .txt 文件,其中包含一些文本,但有些地方不对劲。

每当通过 txt 发送消息时,文件本身包含的内容比原始消息多?例如,我的同事发送了内容为 123456789012345678901234567890123 的 .txt 文件。它使用 DataOutputStreamFileInputStream 发送,并使用 file.length 进行动态文件大小检查。

动态文件大小变量被馈送到 byte[] buffer = new byte[filesize]

我们最终发送它使用

while (fis.read(buffer) > 0) {
dos.write(buffer);
}

fis.close();
dos.close();
}

使用这种方法会产生以下结果:

sent:     123456789012345678901234567890123
received: 12345678901234567890123456789012378

可以看出,出于某种原因,78 被粘贴在消息后面,我们无法弄清楚发生了什么,我们想知道发生了什么。

更奇怪的是,经过更多尝试后,发送的消息按原样接收/到达,没有任何额外的乱码?这是非常不规则的。

非常感谢任何输入,谢谢!

最佳答案

while (fis.read(buffer) > 0) {
dos.write(buffer);

您假设读取填充了整个缓冲区。大多数情况下,它可能会这样做。但有时,只会读取缓冲区的部分

来自javadoc :

returns the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.

因此,read() 方法会告诉您读取了多少字节。你必须确保继续阅读,直到你完全把你的字节放在一起!否则,您将使用一个仅部分填充了新数据的缓冲区。

关于java - 为什么我通过 TCP 发送的文件包含的数据比它本身包含的文件多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64446218/

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