我在我的计算机上将一个大小为 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 只是从那里切掉只是巧合,还是嵌套类有一些特殊的异常(exception)?
为什么 InputStream 的行为如此奇怪? 谢谢!
@Neil:这行得通!非常感谢!
最佳答案
在您提供的代码的修改版本中,问题在于比较。在与 -1 进行比较之前,不要将 'b' 转换为 int 。如果你这样做,那么如果流中的一个字节恰好是 255,你将无法区分这个字节和流的结尾。
因此,将 read() 返回的 int 与 -1 进行比较。然后,如果它不是 -1,则将该值转换为一个字节并将其放入数组(或其他任何内容)中。
int b;
while ((b = stream.read()) != -1)
{
data[length++] = (byte) b;
}
关于Java:意外的 InputStream 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559073/