为什么我通过 TCP 发送的文件包含的数据比它本身包含的文件多?
Why does my file, sent through TCP, contain more data than the file it self contains?
我一直在尝试通过 TCP 向我的一位同事发送文件,并检查文件是否正确到达。我们已成功发送包含一些文本的简单 .txt 文件,但有些地方不对。
每当通过 txt 发送邮件时,文件本身包含的内容比原始邮件多?
例如,我的同事发送了内容为 123456789012345678901234567890123
的 .txt 文件。它使用 DataOutputStream
和 FileInputStream
发送,并使用 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()
方法会告诉您读取了多少字节。你必须确保继续阅读,直到你完全把你的字节放在一起!否则,您将使用仅 部分 填充了新数据的缓冲区。
我一直在尝试通过 TCP 向我的一位同事发送文件,并检查文件是否正确到达。我们已成功发送包含一些文本的简单 .txt 文件,但有些地方不对。
每当通过 txt 发送邮件时,文件本身包含的内容比原始邮件多?
例如,我的同事发送了内容为 123456789012345678901234567890123
的 .txt 文件。它使用 DataOutputStream
和 FileInputStream
发送,并使用 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()
方法会告诉您读取了多少字节。你必须确保继续阅读,直到你完全把你的字节放在一起!否则,您将使用仅 部分 填充了新数据的缓冲区。