关于Java IO的小问题

nuoboxgx 2007-10-07 11:25:48
有如下代码:

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连个字节?
-----------------------------------------------------------------
本人初学者,请高手教教我哦~~~
...全文
85 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanseliuying 2007-10-08
  • 打赏
  • 举报
回复
按照你的思路是不行的,因为你创建的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++;
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧