gpt4 book ai didi

Java 的 URLConnection 未接收整个二进制文件

转载 作者:行者123 更新时间:2023-12-01 15:54:21 24 4
gpt4 key购买 nike

我目前在一所学校工作,该学校包括为我们在类里面提出的标准创建一个 P2P 客户端,该标准使用 HTTP 向同行请求二进制文件的 block 。我们可以使用 Java 的 HTTP 库来发出这些请求,但是我遇到了这些库的一个主要问题。文件的所有 block 都将以 <=64KB 的 block 形式提供,但是当我使用以下代码时,即使响应的内容长度为 64KB,我收到的最大字节数约为 15040:

String response = "";

URL url = new URL(uriPath);
URLConnection conn = url.openConnection ();

conn.setConnectTimeout(30 * 1000);
conn.setReadTimeout(30 * 1000);

InputStream stream = conn.getInputStream();
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

int c;
byte[] buffer = new byte[4096];

while ((c = stream.read(buffer)) != -1)
{
byteArrayOut.write(buffer,0,c);
}

body = byteArrayOut.toByteArray();


stream.close();
result.put(Constants.HEADER_CONTENT_LENGTH, conn.getHeaderField(Constants.HEADER_CONTENT_LENGTH));
result.put(Constants.HEADER_CONTENT_CHECKSUM, conn.getHeaderField(Constants.HEADER_CONTENT_CHECKSUM));
result.put(Constants.KEY_BODY, new String(body));

我们已经测试了我们的服务器组件,并且在使用 wget 或在浏览器中访问 block 时可以正确地提供文件 - 这个 java 客户端是我们能够找到的唯一有问题的客户端。

这是 Java 的 URLConnection 类的问题,还是我的代码中读取响应中返回的二进制文件时出现问题?

注意:我在 Eclipse 和命令行中使用 Java 1.6。

最佳答案

你怎么知道最大字节数是15040?你是 byteArrayOut.toByteArray().length 还是你做了 new String(byteArrayOut.toByteArray()).length() ?

从具有二进制内容的字节数组创建新字符串可能会产生不可预测的结果。使用 FileOutputStream 并打开文件。

关于Java 的 URLConnection 未接收整个二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378191/

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