簡體   English   中英

Java.io.InputStream 類是所有表示字節輸入流的類的超類。 它如何讀取帶有字符的文件?

[英]The Java.io.InputStream class is the superclass of all classes representing an input stream of bytes. How is it reading a file with characters?

我有一個名為mark_method.json的文件, mark_method.json包含ABCDE ,我正在使用InputStream class讀取該文件。

根據定義, InputStream class讀取字節輸入流。 這是如何運作的? 我的文件中沒有字節,但是字符?

我想了解讀取字節的流如何從文件中讀取字符?

public class MarkDemo {
    public static void main(String args[]) throws Exception {
        InputStream is = null;
    
        try {
            is = new FileInputStream("C:\\Users\\s\\Documents\\EB\\EB_02_09_2020_with_page_number_and_quote_number\\Old_images\\mark_method.json");
        }
        catch(Exception e) {
            e.printStackTrace();
        } finally {
            if(is != null) {
                is.close();
            }
        }
    }
}

計算機上的每個數據都以位和字節存儲。 這里文件的內容也以字節為單位存儲。

我們有將這些字節轉換為人類可讀形式的程序,因此我們看到mark_method.json文件包含字符而不是字節。

一個字符是一個字節。 (至少在 ASCII 中)。 從 0 到 127 的每個字節都有一個字符值。 例如 0 是空字符, 0xa 是\\n , 0xd 是\\r , 0x41 是'A'等等。

實現只知道字節。 它不知道,字符 0x2709 是 ✉。 它只將其視為兩個字節:0x27 和 0x09。 只有文本編輯器解釋字節並顯示匹配的符號/字母

我認為您在這里實際問的是如何將使用FileInputStream從文件中讀取的字節轉換為可以打印和操作的 Java String對象。

FileInputStream沒有任何用於直接生成String對象的讀取方法,因此如果這是您想要的,您需要進一步操作您獲得的輸入。

選項一是使用Scanner類:

Scanner scanner = new Scanner(is);
String word = scanner.next();

另一種選擇是讀取字節並使用與字節數組一起使用的String類的構造函數:

byte [] bytes = new byte[10];
is.read(bytes);
String text = new String(bytes);

請注意,為簡單起見,我只是假設您可以從文件中讀取 10 個有效字節。 在實際代碼中,您需要一些邏輯來確保讀取正確的字節數。

此外,如果您的文件不是使用系統默認字符集存儲的,則需要將字符集指定為String構造函數的參數。

最后,您可以使用另一個包裝類BufferedReader ,它有一個readLine函數,它負責從文件中讀取表示一行文本的字節並將它們返回到String所需的所有邏輯。

BufferedReader in = new BufferedReader(new FileReader("foo.in"));
String line = in.readLine();

暫無
暫無

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

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