2012-02-03 55 views
-1

我正在从Java学习Java:完整参考。 我目前正在研究本章中的示例:输入/输出:浏览java.io 我完全理解下面示例中的几行代码。 任何人都可以帮助我用这个例子。请帮我理解下面的java代码

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); 

回答

1

应该是结局:

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

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

从输入流中读取一定数量的字节,并将它们存储到 缓冲区数组b中。

这条线:

new String(b,0,n); 

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

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

最后这一点:

System.err 

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

+0

雅编辑。谢谢你的回答。你的回答非常有帮助。 – user907629 2012-02-03 20:03:52

1

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

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

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

+2

好吧,在这里我们有'read(byte [])',它保持读取一些缓冲区的字节数。它会返回读取的字节数,如果我们有EOF或其他流不返回数据的其他东西,则返回-1。 – OleGG 2012-02-03 20:09:42

+0

感谢您的回答。 – user907629 2012-02-03 20:09:48