gpt4 book ai didi

java - InputStream 跳过字节

转载 作者:搜寻专家 更新时间:2023-11-01 03:12:10 25 4
gpt4 key购买 nike

这是我第二次遇到 InputStream 这个极其烦人的问题。此 InputStream 属于应该接收图像的套接字。读取这张图片的代码如下:

InputStream input = socket.getInputStream();

InputStreamReader reader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(reader);
int total = Integer.parseInt(bufferedReader.readLine());
int bytesRead = 0;
byte[] buffer = new byte[total]; // total is the total size of the image

while (bytesRead < total) {
int next = input.read(buffer, bytesRead, total-bytesRead);
if (next > 0) {
bytesRead += next;
System.out.println("Read: " + bytesRead);
}
}

现在奇怪的是,这段代码跳过了图像的前 1182 个字节,然后读取剩下的部分。所以当 total 大小为 15000 字节时,它读取字节 1182-15000。

我检查了 Wireshark 并传输了整个图像。代码没有抛出异常。 input.read() 照常返回 -1。

已经使用 BufferedReader 从流中读取了之前的数据。此数据只有 5 个字符长,因此它不能包含丢失的 1K,但我的猜测是 BufferedReader.readLine() 方法从 InputStream 读取(缓冲)的字节多于所需的字节数。这是正确的吗?

几个月前我遇到了同样的问题,但我完全不知道我是如何解决它的。

希望大家帮忙。

提前致谢。

编辑: 我可以通过在发送图像大小和图像数据之间添加 100 毫秒的 hibernate 来解决问题。它解决了问题,但我仍然很想知道更合适的解决方案

最佳答案

正如名称 **Buffererd**Reader 所表明的,它将从底层读取器中捕获比第一行更多的字节,因此也会从流中捕获更多的字节。否则 if 不会被称为“缓冲”。

不幸的是,我不知道 Java 中有任何未弃用的类允许以您想要的方式混合二进制和文本数据。

我建议您修改协议(protocol)并以某种二进制编码传输图像的长度。然后你可以坚持使用 InputStream

关于java - InputStream 跳过字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867580/

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