有如下代码:
- Java code
import java.io.ByteArrayInputStream;import java.io.IOException;public class ByteArrayTester{ public static void main(String agrs[]) throws IOException { byte[] buff = new byte[] { 2, 15, 67, -1, -9, 9, 100, 122 }; for (byte b : buff) { System.out.print(b + " "); } System.out.println(); ByteArrayInputStream in = new ByteArrayInputStream(buff, 1, 4); int data = in.read(); while (data != -1) { System.out.print(data + " "); data = in.read(); } in.close(); }}
打印结果为:
2 15 67 -1 -9 9 100 122
15 67 255 247
假如我想在打印完4个后再打印后面的2个,怎么做?
最笨的方法是再new一个ByteArrayInputStream实例:
ByteArrayInputStream in2 = new ByteArrayInputStream(buff, 5, 6);
我想问能不能充分利用原来的ByteArrayInputStream实例in来打印5,6连个字节?
-----------------------------
本人初学者,请高手教教我哦~~~
------解决方案--------------------
按照你的思路是不行的,因为你创建的ByteArrayInputStream in2 = new ByteArrayInputStream(buff, 5, 6);
这个流中只有四个数,你打印的时候是从流中取数的,打印四个之后流中已经没数了,再读就是-1了,所以你再想用原来的流读就异常了。
你要读数组中接下来的两个数就必须 要先把数读入到流中才可以。
不知道你的具体需求是什么,如果你想分两次打印的话,一种方法是创建新的流,另一中方法是把数据一次性读入到第一次创建的流中,根据需求加个计数器什么的分次打印就好了。
比如:ByteArrayInputStream in = new ByteArrayInputStream(buff, 1, 6);
int data = in.read();
int i=1;
while (data != -1&&i<5)
{
System.out.print(data + " ");
data = in.read();
i++;
}