java从网络上获取输入流时不稳定掉字节?!

时间:2022-12-14 10:04:02
本来网络文件的字节序列是:
 100  111  99  117  109  101  110  116  46  119  114  105  116  101  40  39
我用url,打开输入流读取,有时就能读取正确,有时就读取成了下面这行序列
 -60  -43  -30  -65  -23  -51  -63  -75  -40  -95  -93  6.........
实在让我非常不解啊!!又不是多线程,怎么运行出来每次都不一样么?!!
这两种情况大概每个占一半出现率。。也就是说一半的时候是正确的。。


下面是程序源码
is=url.openStream();
bytesRes = new byte[4024];
 Data = new byte[0];
while ((tmp = is.read(bytesRes)) != -1) {

//这个hebing函数的功能是把 bytesRes数组的 tmp个字节加入到data中去
Data = hebing(Data, bytesRes, tmp);


}
is.close();

2 个解决方案

#1


顺便一提,很诡异的是,我把  bytesRes = new byte[4024];
改成 bytesRes = new byte[14024];(网络文本的子节数小于14024)
就一直都正确咯。。。。

#2


is=url.openStream();
bytesRes = new byte[4024];
// Data = new byte[0];
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((tmp = is.read(bytesRes)) != -1) {

//这个hebing函数的功能是把 bytesRes数组的 tmp个字节加入到data中去
//Data = hebing(Data, bytesRes, tmp);
output.write(bytesRes, 0, tmp);
}
is.close();

byte[] result = output.toByteArray(); // Here is your expected file data

#1


顺便一提,很诡异的是,我把  bytesRes = new byte[4024];
改成 bytesRes = new byte[14024];(网络文本的子节数小于14024)
就一直都正确咯。。。。

#2


is=url.openStream();
bytesRes = new byte[4024];
// Data = new byte[0];
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((tmp = is.read(bytesRes)) != -1) {

//这个hebing函数的功能是把 bytesRes数组的 tmp个字节加入到data中去
//Data = hebing(Data, bytesRes, tmp);
output.write(bytesRes, 0, tmp);
}
is.close();

byte[] result = output.toByteArray(); // Here is your expected file data