繁体   English   中英

Java:意外的InputStream行为

[英]Java: unexpected InputStream behavior

我在计算机上将一个大小为21 KB的JAR文件上传到了一个网站。 我找到了该JAR文件的直接链接,并为该文件创建了一个InputStream:

URL url = new URL("addresstofile");
InputStream stream = url.openStream();

预计流中可用的字节数将是~21,000。 但是,可用金额为7,048。 在尝试调试时,我将这些7,048字节保存在一个字节数组中,然后将这些字节写入扩展名为“.jar”的临时文件中。

我提取JAR文件中的类(即7 KB;原始为21 KB)。 大多数类都在那里,除了我注意到嵌套类不存在。 我不确定为什么会这样 - 只是巧合,InputStream只是切断了那里,还是嵌套类有一些特殊的例外?

为什么InputStream的表现如此奇怪? 谢谢!

@Neil:这个有效! 非常感谢!

在您提供的代码的修改版本中,问题是比较。 与-1进行比较之前 ,不要将'b'强制转换为int。 如果这样做,则如果流中的一个字节恰好是255,则将无法区分该字节和流的末尾。

因此,在read()返回的int上与-1进行比较。 然后,如果它不是 -1,则将值转换为一个字节并将其放入数组(或其他)。

int b;
while ((b = stream.read()) != -1)
{
    data[length++] = (byte) b;
}

在输入流上调用available()可以告诉您现在可以读取多少字节 - 因为网络I / O不一定是整个文件,很可能是在本地套接字中缓冲的。 循环并继续尝试。

预计流中可用的字节数约为21,000

为什么?

你怎么可能知道没有阻塞可以读取的字节数是21,000?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM