<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java `InputStream`教程 原文:http://zetcode.com/java/inputstream/ Java `InputStream`教程顯示了如何使用 Java 中的`InputStream`類。 Java 流是來自源或目的地的數據流。 Java 流的一個很好的比喻是水從水龍頭流入浴缸,然后又流入排水裝置。 `InputStream`和`OutputStream`是對數據(例如 C 文件指針)的低級訪問的抽象。 ## Java `InputStream` `InputStream`是讀取數據的源。 流可以表示各種類型的源,包括磁盤文件,設備,其他程序和內存數組。 流支持許多不同類型的數據,包括簡單字節,原始數據類型,本地化字符和對象。 ## Java `InputStream`子類 `InputStream`是一個抽象類; 它是表示字節輸入流的所有類的超類,包括`AudioInputStream`,`ByteArrayInputStream`,`FileInputStream`,`FilterInputStream`,`ObjectInputStream`,`PipedInputStream`和`SequenceInputStream`。 ## Java `InputStream`關閉 `FileInputStream`的`close()`方法關閉輸入流,并釋放與此流關聯的所有系統資源。 在我們的示例中,我們使用`try-with-resources`語句,該語句確保在語句末尾關閉每個資源。 ## Java `InputStream`讀取 `InputStream`使用以下讀取方法讀取字節: * `read(byte[] b)` - 從此輸入流中讀取最多`b.length`個字節的數據到一個字節數組中。 * `read(byte[] b, int off, int len)` - 從此輸入流中讀取最多`len`個字節的數據到一個字節數組中。 * `read()` - 從文件輸入流中讀取一個字節。 ## Java `InputStream`讀取文本 以下示例顯示如何使用`InputStream`讀取文本文件。 `thermopylae.txt` ```java The Battle of Thermopylae was fought between an alliance of Greek city-states, led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the course of three days, during the second Persian invasion of Greece. ``` 在示例中,我們使用此文本文件。 `JavaInputStreamText.java` ```java package com.zetcode; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; public class JavaInputStreamText { public static void main(String[] args) throws IOException { String fileName = "src/resources/thermopylae.txt"; try (InputStream fis = new FileInputStream(fileName); InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); BufferedReader br = new BufferedReader(isr)) { br.lines().forEach(line -> System.out.println(line)); } } } ``` 使用`FileInputStream`,`InputStreamReader`和`BufferedReader`讀取文本文件。 ```java try (InputStream fis = new FileInputStream(fileName); ``` `FileInputStream`是`InputStream`的一種特殊形式,用于從文件中讀取字節。 ```java InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); ``` `InputStreamReader`是從字節流到字符流的橋梁:它讀取字節,并使用指定的字符集將其解碼為字符。 ```java BufferedReader br = new BufferedReader(isr)) { ``` `BufferedReader`從字符輸入流中讀取文本,緩沖字符以有效讀取字符,數組和行。 ```java br.lines().forEach(line -> System.out.println(line)); ``` 從緩沖讀取器中按行讀取數據。 ## Java `InputStream`讀取字節 `InputStream`的讀取方法讀取字節。 `JavaInputStreamBytes.java` ```java package com.zetcode; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class JavaInputStreamBytes { public static void main(String[] args) throws IOException { String fileName = "src/resources/ball.png"; try (InputStream is = new FileInputStream(fileName)) { byte[] buffer = new byte[is.available()]; is.read(buffer); int i = 0; for (byte b: buffer) { if (i % 10 == 0) { System.out.println(); } System.out.printf("%02x ", b); i++; } } System.out.println(); } } ``` 該示例從 PNG 圖像讀取字節,并將字節以十六進制格式打印到控制臺。 ```java try (InputStream is = new FileInputStream(fileName)) { ``` 我們使用`FileInputStream`從圖像文件中讀取字節。 ```java byte[] buffer = new byte[is.available()]; is.read(buffer); ``` 使用`read()`方法,我們將字節讀入字節數組。 ```java int i = 0; for (byte b: buffer) { if (i % 10 == 0) { System.out.println(); } System.out.printf("%02x ", b); i++; } ``` 我們遍歷數組并將字節以十六進制格式打印到控制臺。 ```java 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 0a 00 00 00 0a 08 06 00 00 00 8d 32 cf bd 00 00 00 04 73 42 49 54 08 08 08 08 7c 08 64 88 00 00 00 09 70 48 59 73 00 00 0d d7 00 00 0d d7 01 42 28 9b 78 00 00 00 19 74 45 58 74 53 6f ... ``` 這是示例的部分示例輸出。 ## 從 URL 讀取 Java `InputStream` `InputStream`允許從 URL 源讀取數據。 `JavaInputStreamURL.java` ```java package com.zetcode; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; public class JavaInputStreamURL { public static void main(String[] args) throws IOException { String webSite = "http://www.something.com"; URL url = new URL(webSite); try (InputStream is = url.openStream(); BufferedReader br = new BufferedReader( new InputStreamReader(is))) { br.lines().forEach(System.out::println); } } } ``` 該示例將`InputStream`打開到網頁并讀取其數據。 ```java try (InputStream is = url.openStream(); ``` 使用`openStream()`方法創建 URL 的`InputStream`。 ```java <html><head><title>Something.</title></head> <body>Something.</body> </html> ``` 這是輸出。 ## Java `InputStream`讀取反序列化的數據 `ObjectInputStream`讀取先前使用`ObjectOutputStream`寫入的序列化數據。 `Country.java` ```java package com.zetcode; import java.io.Serializable; public class Country implements Serializable { static final long serialVersionUID = 42L; private String name; private int population; public Country(String name, int population) { this.name = name; this.population = population; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } } ``` 這是`Country` bean。 我們將序列化和反序列化國家列表。 `JavaObjectOutputStreamEx.java` ```java package com.zetcode; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; public class JavaObjectOutputStreamEx { public static void main(String[] args) throws IOException { String fileName = "src/resources/myfile.dat"; try (OutputStream fis = new FileOutputStream(fileName); ObjectOutputStream out = new ObjectOutputStream(fis)) { List<Country> countries = new ArrayList<>(); countries.add(new Country("Slovakia", 5429000)); countries.add(new Country("Norway", 5271000)); countries.add(new Country("Croatia", 4225000)); countries.add(new Country("Russia", 143439000)); out.writeObject(countries); } } } ``` 該示例序列化對象列表。 ```java out.writeObject(countries); ``` 國家列表被寫入`ObjectOutputStream`。 `JavaInputStreamObjects.java` ```java package com.zetcode; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.List; public class JavaInputStreamObjects { public static void main(String[] args) throws IOException, ClassNotFoundException { String fileName = "src/resources/myfile.dat"; try (InputStream fis = new FileInputStream(fileName); ObjectInputStream oin = new ObjectInputStream(fis)) { List<Country> countries = (List<Country>) oin.readObject(); countries.forEach(System.out::println); } } } ``` 我們使用`ObjectInputStream`讀取序列化的數據。 ## Java `InputStream`讀取流序列 `SequenceInputStream`代表一系列輸入流。 它允許從多個有序流中讀取。 `JavaInputStreamSequence.java` ```java package com.zetcode; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.SequenceInputStream; public class JavaInputStreamSequence { public static void main(String[] args) throws IOException { String fileName1 = "src/resources/myfile.txt"; String fileName2 = "src/resources/myfile1.txt"; String fileName3 = "src/resources/myfile2.txt"; try (InputStream is1 = new FileInputStream(fileName1); InputStream is2 = new FileInputStream(fileName2); InputStream is3 = new FileInputStream(fileName3); SequenceInputStream sis1 = new SequenceInputStream(is1, is2); SequenceInputStream sis = new SequenceInputStream(sis1, is3)) { int b = sis.read(); while (b != -1) { System.out.printf("%c", b); b = sis.read(); } System.out.println(); } } } ``` 該示例從三個`FileInputStreams`中讀取。 ```java try (InputStream is1 = new FileInputStream(fileName1); InputStream is2 = new FileInputStream(fileName2); InputStream is3 = new FileInputStream(fileName3); SequenceInputStream sis1 = new SequenceInputStream(is1, is2); SequenceInputStream sis = new SequenceInputStream(sis1, is3)) { ``` 我們定義了三個輸入流,并將這些流放入`SequenceInputStreams`中。 ```java int b = sis.read(); while (b != -1) { System.out.printf("%c", b); b = sis.read(); } ``` 我們使用`read()`從流中讀取數據。 在本教程中,我們介紹了 Java `InputStream`類。 您可能也對相關教程感興趣: [Java `InputStreamReader`教程](/java/inputstreamreader/), [Java `FileOutputStream`教程](/java/fileoutputstream/), [Java `FileInputStream`教程](/java/fileinputstream/), [Java 文件時間](/articles/javafiletime/), [Java `FileWriter`教程](/java/filewriter/), [Java 附加到文件](/articles/javaappendtofile/),[用 Java 讀取文本文件](/articles/javareadtext/)和 [Java 教程](/lang/java/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看