摘要:知識(shí)點(diǎn)總結(jié)字節(jié)流知識(shí)點(diǎn)總結(jié)字節(jié)流在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)時(shí)要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)時(shí),就要使用輸出流。字節(jié)流主要操作類型數(shù)據(jù),以數(shù)組為準(zhǔn),主要操作類是類和類。
Java知識(shí)點(diǎn)總結(jié)(JavaIO-字節(jié)流)
@(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO]
[toc]
字節(jié)流在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)時(shí)要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)時(shí),就要使用輸出流。
字節(jié)流主要操作byte類型數(shù)據(jù),以byte數(shù)組為準(zhǔn),主要操作類是 OutputStream 類和 InputStream 類。
輸出寫(xiě)入數(shù)據(jù),輸入寫(xiě)出數(shù)據(jù)
字節(jié)輸出流:OutputStream是整個(gè)IO包字節(jié)輸出流的最大父類,定義如下:
public abstract class OutputStream implements Closeable, Flushable
從定義可以發(fā)現(xiàn):
OutputStream是一個(gè)抽象類,必須要通過(guò)子類實(shí)例化對(duì)象,才能使用。
可以使用子類FileOutputStream,向上轉(zhuǎn)型后,操作一個(gè)文件。
可以通過(guò)InputStream 從文件中把內(nèi)容讀取出來(lái)。
InputStream 類的定義如下: public abstract class InputStream extends Object implements Closeable
同OutputStream 類一樣,InputStream 本身也是一個(gè)抽象類,必須依靠其子類,如果從文件中讀取,使用子類FileInputStream。
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Demo03 { // 將字符串轉(zhuǎn)化為byte[]進(jìn)行輸出 public static void test1() throws IOException { File file = new File("E:" + File.separator + "test.txt"); OutputStream fos = new FileOutputStream(file); String str = "Hello world!"; byte[] b = str.getBytes(); // 只能使用byte數(shù)組,所以將字符串轉(zhuǎn)為byte數(shù)組 fos.write(b); fos.close(); } // 在文末追加新的內(nèi)容,且一個(gè)字節(jié)一個(gè)字節(jié)的輸出 public static void test2() throws IOException { File file = new File("E:" + File.separator + "test.txt"); OutputStream fos = new FileOutputStream(file, true); String str = " Hello world!"; byte[] b = str.getBytes(); // 只能使用byte數(shù)組,所以將字符串轉(zhuǎn)為byte數(shù)組 for (int i = 0; i < b.length; i++) { fos.write(b[i]); } fos.close(); } // 讀取數(shù)據(jù) public static void test3() throws IOException { File file = new File("E:" + File.separator + "test.txt"); InputStream fis = new FileInputStream(file); // byte[] b = new byte[1024]; //定義一個(gè)數(shù)組用來(lái)存放讀取的數(shù)據(jù) byte[] b = new byte[(int) file.length()]; // 根據(jù)文件的數(shù)據(jù)量,開(kāi)辟指定大小的 byte 數(shù)組 int len = fis.read(b); // 讀取內(nèi)容到數(shù)組中 fis.close(); System.out.println("讀取數(shù)據(jù)的長(zhǎng)度" + len); // System.out.println("內(nèi)容為:"+new String(b)); System.out.println("內(nèi)容為:" + new String(b, 0, len)); // 把 byte 數(shù)組轉(zhuǎn)為字符串輸出 } // 使用循環(huán),一個(gè)字節(jié)一個(gè)字節(jié)讀取數(shù)據(jù) public static void test4() throws IOException { File file = new File("E:" + File.separator + "test.txt"); InputStream fis = new FileInputStream(file); byte[] b = new byte[(int) file.length()]; for (int i = 0; i < b.length; i++) { b[i] = (byte) fis.read(); } fis.close(); System.out.println("內(nèi)容為:" + new String(b)); } // 如果不知道要輸入的內(nèi)容有多大,則使用是否讀到文件末尾的方式來(lái)讀取文件 public static void test5() throws IOException { File file = new File("E:" + File.separator + "test.txt"); InputStream fis = new FileInputStream(file); int len = 0; //用于記錄讀取數(shù)據(jù)的個(gè)數(shù) byte[] b = new byte[1024]; int temp = 0; //接收讀取的每一個(gè)內(nèi)容 while((temp = fis.read()) != -1){ b[len] = (byte) temp; len ++; } fis.close(); System.out.println("內(nèi)容為:" + new String(b,0,len)); } public static void main(String[] args) { try { test1(); test2(); test5(); } catch (IOException e) { e.printStackTrace(); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69163.html
摘要:使用字節(jié)流寫(xiě)入文件,如果沒(méi)有關(guān)閉字節(jié)流操作,文件依然存在內(nèi)容,說(shuō)明字節(jié)流是操作文件本身的。字節(jié)流比字符流更好,使用更廣泛。 Java知識(shí)點(diǎn)總結(jié)(JavaIO-字符流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] 在程序中一個(gè)字符等于兩個(gè)字節(jié),那么 Java 提供了 Reader 和 Writer 兩個(gè)專門操作字符流的類。 字符輸出流:Writer 類定義如下: p...
摘要:知識(shí)點(diǎn)總結(jié)轉(zhuǎn)換流知識(shí)點(diǎn)總結(jié)是的子類,將一個(gè)字符流的輸出對(duì)象變?yōu)樽止?jié)流的輸出對(duì)象。將字節(jié)輸出流轉(zhuǎn)為字符輸出流字節(jié)流轉(zhuǎn)為字符流蘋果將字節(jié)輸入流轉(zhuǎn)為字符輸入流內(nèi)容是 Java知識(shí)點(diǎn)總結(jié)(JavaIO-轉(zhuǎn)換流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault.com/img/bV82dQ?w=849&h=226); O...
摘要:緩沖輸入流從被稱為緩沖區(qū)的存儲(chǔ)器區(qū)域讀出數(shù)據(jù)僅當(dāng)緩沖區(qū)是空時(shí),本地輸入才被調(diào)用。同樣,緩沖輸出流,將數(shù)據(jù)寫(xiě)入到緩存區(qū),只有當(dāng)緩沖區(qū)已滿才調(diào)用本機(jī)輸出。 :https://segmentfault.com/blog... 1.前言 前陣子休息天日常在尋找項(xiàng)目里不好的代碼,看到了這樣的一段代碼: private Result sshSameExec(Session session,...
摘要:是字節(jié)流通向字符流的橋梁它使用指定的讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺(tái)默認(rèn)的字符集。為了達(dá)到最高效率,可要考慮在內(nèi)包裝。 JAVA緩沖區(qū)就是先讀一些數(shù)據(jù)在內(nèi)存中間或者先寫(xiě)一部分?jǐn)?shù)據(jù)在內(nèi)存中。比如寫(xiě),不是每次寫(xiě)數(shù)據(jù)到磁盤, 而是先把數(shù)據(jù)寫(xiě)到內(nèi)存中,等到內(nèi)存的緩沖區(qū)滿了再一次寫(xiě)入磁盤,減少磁盤訪問(wèn)。JAVA讀取大文需要使用radomAcces...
摘要:我們?cè)谇懊嬉呀?jīng)提到的幾種流就有它們的使用情境和和主要用于解決不限于純文本的二進(jìn)制文件的輸入輸出情境。同時(shí),如果使用帶有緩沖區(qū)的緩沖輸入輸出流的話會(huì)使得讀寫(xiě)的效率更高,有助于更快地完成不限于純文本的二進(jìn)制文件的讀寫(xiě)。 不同情境的流: 流的種類很多,針對(duì)不同的IO數(shù)據(jù)交換情景我們可以選擇不同的流來(lái)完成任務(wù)。 我們?cè)谇懊嬉呀?jīng)提到的幾種流就有它們的使用情境: 1. FileInputStrea...
閱讀 1164·2021-11-24 09:39
閱讀 3631·2021-09-02 15:21
閱讀 2172·2021-08-24 10:01
閱讀 733·2021-08-19 10:55
閱讀 2458·2019-08-30 15:55
閱讀 1218·2019-08-30 14:16
閱讀 3001·2019-08-29 15:17
閱讀 3242·2019-08-29 13:53