日期:2014-05-20  浏览次数:20672 次

关于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++;
}