一个非常奇怪的问题(关于 InputStream),不知道是否 Java 的 BUG

iamfancy 2003-10-11 06:20:08
我使用如下代码读取一个 16K 大小的数据文件:data.dat
byte[] gbData = new byte[8177 * 2];
InputStream in = ClassLoader.getSystemResourceAsStream(
"com/sunway/james/st/res/data.dat");
in.read(gbData);
in.close();

如果我不打包,直接在按制台下运行,这些数据都可以完整的读出来。但是,如果我打成 jar 包后,不论是通过 manifest 的 Main-Class 运行还是通过 -cp jarfile mainclass 运行,结果都不正确,gbData 这个数据只有前 600 多个数值是正确的,后面的全部都是 0。

如果我把 in.read(gbData) 换成按每 256 个字节读一次这样多次读下来,从 600 多的某个位置开始,后面的数据虽然不全都是 0,但基本上都不正确,请问各位,这是一个什么问题?该怎么解决?

...全文
93 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamfancy 2003-10-13
  • 打赏
  • 举报
回复
问题解决了,不是有 BUG,关键代码如下:

byte[] data = [BIG_LENGTH];
InputStream in = new FileInputStream("data.dat");
int n = 0, i;
while() {
i = in.read(data, n, BIG_LNEGHT - n);
if (i <= 0) break;
n += i;
}

这就样就可以读完了,大家可以把每次的 i 值打印出来查看,你会发现每次 i 的值都是 512 或者其它 (估计是 Java 默认的缓冲大小,或者每次读入的最大数据量)

---------------
虽然没有人回答,不过也要放分啊,凡是 UP,大家都有分。
LuZhou 2003-10-12
  • 打赏
  • 举报
回复
应该是有bug吧。
jscsqb 2003-10-12
  • 打赏
  • 举报
回复
up一下,没有碰到过这样的问题
zzgcxy 2003-10-12
  • 打赏
  • 举报
回复
up!
iamfancy 2003-10-12
  • 打赏
  • 举报
回复
请大家帮忙试试,是不是你们也会有这样的问题?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧