簡體   English   中英

FileInputStream和FileOutputStream如何在Java中工作?

[英]How FileInputStream and FileOutputStream Works in Java?

我正在閱讀Java Tutorials Docs中Java中的所有輸入/輸出流。 教程編寫者使用此示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
    public static void main(String[] args) throws IOException {

        FileInputStream in = null;
        FileOutputStream out = null;

        try {
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("outagain.txt");
            int c;

            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }
}

xanadu.txt文件數據:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.

輸出到outagain.txt文件:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
  1. 為什么即使我們正在閱讀字符,作者也會使用int c

  2. 為什么在條件下使用-1

  3. 怎么out.write(c); 方法將int轉換為再次字符?

1:現在我想問為什么作家使用int c? 即使我們正在讀人物。

FileInputStream.read()int返回一個數據字節。 這是有效的,因為一個字節可以表示為int而不會損失精度。 請參閱此答案以了解為什么返回int而不是byte

2:第二個為什么在條件下使用-1?

到達文件末尾時,返回-1。

3:如何out.write(c); 方法將int轉換為再次字符? 在outagain.txt文件中提供相同的輸出

FileOutputStream.write()將一個byte參數作為int 由於int跨越多於一個字節的值,因此忽略給定int的24個高位,使其成為字節兼容的值:Java中的int 總是32位 通過刪除24個高位,您可以達到8位值,即一個字節。

我建議你仔細閱讀每種方法的Javadocs。 作為參考,他們回答了您的所有問題:

read

從輸入流中讀取下一個數據字節。 值字節作為int返回,范圍為0到255.如果沒有字節可用,因為已到達流的末尾,則返回值-1。 此方法將阻塞,直到輸入數據可用,檢測到流的末尾或拋出異常。

write

將指定的字節寫入此輸出流。 寫入的一般合同是將一個字節寫入輸出流。 要寫入的字節是參數b的八個低位。 b的24個高位被忽略。

只需閱讀文檔。

這里是read方法docs http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html#read()

public int read()throws IOException從此輸入流中讀取一個數據字節。 如果尚未提供輸入,此方法將阻止。

指定者:在類InputStream中讀取

返回:數據的下一個字節,如果到達文件末尾,則返回-1。

那個int是你的下一組字節數據。 現在,這是答案。

1)當你為一個int賦一個char時,它表示它是int的ascii數。

如果您有興趣,請在此處列出字符及其ascii代碼列表https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

2)-1如果到達文件的末尾。 所以這是對數據的檢查存在與否。

3)當您向打印編寫器發送ascii代碼時,它會將相應的char打印到文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM