今天发现在Linux下使用getResourceAsStream有一个不能完整读取数据的问题。代码如下:
public void testDataCompare() {
try {
InputStream iStream = getClass().getResourceAsStream("/data.bin");
byte[] dSrc = new byte[iStream.available()];
iStream.read(dSrc);
FileInputStream fStream = new FileInputStream(new File("data.bin"));
byte[] dTrg = new byte[fStream.available()];
fStream.read(dTrg);
boolean success = false;
if(dSrc.length == dTrg.length) {
for(int i=0; i<dSrc.length && (success == (dSrc[i] == dTrg[i])); i++);
}
System.out.println(success ? "same" : "not same");
} catch(Exception e) {
e.printStackTrace();
}
}
注:
- iStream及fStream所读取的其实是同一个文件,整个文件大小为902 byte。
- Windows及Linux下均使用jdk1.5.0_01。
- 程序在Windows下compile及打包成jar。
- 将dSrc及dTrg的内容dump出来看,发现dSrc在507 byte之后所有内容均是0。
- 同一段代码在Windows XP下完全无问题。
有其他人有类似情况吗?或者有无类似环境可以测试?