2012-02-03 53 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