请帮我理解下面的java代码

时间:2012-02-03 19:58:40

标签: java input io

我正在从Java学习java:Complete Reference。 我目前正在研究本章中的示例:输入/输出:探索java.io 我从下面的例子中了解了几行代码。 任何人都可以帮我这个例子。

import java.io.*;

class FileInputStreamDemo
{
public static void main(String args[]) throws IOException
{
InputStream f = new FileInputStream("E://SomeRandomTextFile.txt");
System.out.println("Total available bytes : " + size = f.available());

int n = size/40;
System.out.println("First" + n + " bytes of file one read() at a time");

for(int i=0; i<n; i++)
{
System.out.println((char) f.read());
}

System.out.println("\n Still available: "+ f.available());
System.out.println("Reading the text " + n + " with one read(b[])");
byte b[] = new byte[n];

if(f.read(b) != n)
{
System.err.println("coudn't read" + n + "bytes.");
}
System.out.println(new String(b,0,n));
}

在上面的代码中,我了解了最后五行代码。

的结果是什么?
f.read(b) 

什么是

System.err

的结果是什么?
new String(b,0,n);

2 个答案:

答案 0 :(得分:1)

应该是:

if(f.read(b) != n)

这是一个从文件中读取字节到缓冲区的方法调用。来自javadoc:

  

从输入流中读取一些字节并将其存储到   缓冲阵列b。

这一行:

new String(b,0,n);

从缓冲区String内的字节创建一个新的b,从索引0开始并接下来的n个字节。来自javadoc:

  

通过解码指定的字节子数组构造一个新的String   使用平台的默认字符集。

最后这个:

System.err

返回对程序标准错误流的引用。

答案 1 :(得分:1)

f.read(b)会生成长度为1的整数或单个字节。

System.err找到错误窗口,然后在那里放置一条消息,就像System.out找到控制台窗口一样,然后在那里发送消息。

new String(b,0,n)将使用String(byte [] bytes,int offset,int length)构造函数生成一个字符串数组b的字符串,从偏移量0开始,长度为n。