gpt4 book ai didi

java - 我无法从网站获取所有字节

转载 作者:行者123 更新时间:2023-12-01 18:59:06 24 4
gpt4 key购买 nike

我正在尝试从网站读取所有字节,但我认为我没有获取所有字节。我为字节数组长度给出了一个很高的值。我使用了这个方法,但它总是返回异常。

这是代码:

DataInputStream dis = new DataInputStream(s2.getInputStream());

byte[] bytes = new byte[900000];

// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=dis.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}

// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read website");
}
out.write(bytes);

编辑版本:

ByteArrayOutputStream bais = new ByteArrayOutputStream();
InputStream is = null;
try {
is = s2.getInputStream();
byte[] byteChunk = new byte[4096]; // Or whatever size you want to read in at a time.
int n;
while ( (n = is.read(byteChunk)) > 0 ) {
bais.write(byteChunk, 0, n);
}
}
catch (IOException e) {
System.err.printf ("Failed while reading bytes");
e.printStackTrace ();
// Perform any other exception handling that's appropriate.
}
finally {
if (is != null) { is.close(); }
}
byte[] asd = bais.toByteArray();
out.write(asd);

最佳答案

这就是问题:

if (offset < bytes.length)

如果原始数据超过 900,000 字节,您将触发该事件。如果响应在小于该时间的时间内完全完成,read() 将正确返回 -1 以指示流结束。

如果 offset 等于 bytes.length,您实际上应该抛出异常,因为这表明您可能已截断数据: )

请注意,不清楚您从哪里获得 900,000 的值(value)...

我建议如果您想坚持使用原始流,请使用 GuavaByteStreams.toByteArray方法读取所有数据。或者,您可以继续循环,在每次迭代时读入较小缓冲区,写入ByteArrayOutputStream

关于java - 我无法从网站获取所有字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939581/

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