java中输入流中read()方法的使用

danwell7 2012-01-06 07:45:02
import java.io.*;
public class InputExa
{

public static void main(String[] args)
{ int b;
byte tom[]=new byte[10];
try
{
File f=new File("G://java code/jackxu/src","WaitExa.java");
FileInputStream in=new FileInputStream(f);
b=in.read(tom);
String s=new String(tom);
b=in.read(tom,0,5);
s=new String(tom);
System.out.println("第一次输出"+s);
}
catch(IOException e)
{ System.out.println("File Read Error"+e);
}
in.close();
}

}


上面的程序是读取WaitExa.java文件,把读取的字节转化为字符串输出,b=in.read(tom)这是第一个read()方法,它读取的字节数没确定,就由定义的字节数组确定。b=in.read(tom,0,5);这是第二次使用read()方法,这次规定了字节读取的顺序和长度,结果输出来的还是按第一次byte[10]中输出了10无序字符,这是怎么回事??
...全文
1971 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
danwell7 2012-01-06
  • 打赏
  • 举报
回复
知道了,谢了
TomZXY 2012-01-06
  • 打赏
  • 举报
回复
你不防定义两个byte数组,向下面的代码一样,
假设你的文件中的字符为abcdefghijklmnopqrst……等
int b;
byte tom[] = new byte[10];
byte tom1[] = new byte[10];
File f = new File("G://java code/jackxu/src","WaitExa.java");
FileInputStream in = null;
try {
in = new FileInputStream(f);
b = in.read(tom);//b等于10
String s = new String(tom);
System.out.println("第一次输出" + s);//输出a~j前面十个
b = in.read(tom1, 0, 5);//b等于5
s = new String(tom1
System.out.println("第二次输出" + s););//输出k~o接着j后面五个。因为数组开辟的空间为十,所以后面再填充五个空格。为什么会接着后面读取,因为你在同一个流中读取的, in.read(tom1, 0, 5),所以j后面肯定读取k,这就是0(当前的下一个)的含义,5就代表读取几个字符。
} catch (IOException e) {
System.out.println("File Read Error" + e);
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
如果像你那样只有一个数组,输出的就没有空格,前面5个字符替换掉,后面5个不变。不知道懂不懂,这个东西我也只能说成这样了。
Steve 2012-01-06
  • 打赏
  • 举报
回复
b=in.read(tom,0,5)
0是offset,回到tom的位置0从in读5个覆盖掉tom前5位,而tom后5位是第一次读的。
可能碰巧你第一次读的10位的前5位与第二次读的5位一样。

62,635

社区成员

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

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