当前位置: 代码迷 >> J2SE >> 关于Java IO的小疑点
  详细解决方案

关于Java IO的小疑点

热度:211   发布时间:2016-04-24 13:33:16.0
关于Java IO的小问题
有如下代码:
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++;
}
  相关解决方案