摘要:文件的讀寫是流常用的也是最基礎的操作,然而字節流,字符流,,,等等,各種各樣的流操作類傻傻分不清楚,今天我們就對常用的流操作做簡單的總結。
文件的讀寫是java i/o流常用的也是最基礎的操作,然而字節流,字符流,InputStream,OutpurStream,Reader,Writer等等,各種各樣的流操作類傻傻分不清楚,今天我們就對常用的流操作做簡單的總結。本文力求簡潔,不至于看到大量的代碼覺得困倦。
字節流/字符流表分類 | 字節輸入流 | 字節輸出流 | 字符輸入流 | 字符輸出流 | |
---|---|---|---|---|---|
抽象基類 | InputStream | OutputStream | Reader | Writer | |
訪問文件 | FileInputStream | FileOutputStream | FileReader | FileWriter | |
訪問數組 | ByteArrayInputStream | BiteArrayOutputStream | CharArrayReader | CharArrayWriter | |
訪問管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter | |
訪問字符串 | StringReader | StringWriter | |||
緩沖流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter | |
轉換流 | InputStreamReader | OutputStreamWriter | |||
對象流 | ObjectInputStream | ObjectOutputStream | |||
抽象基類 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter | |
打印流 | PrintStream | PrintWriter | |||
推回輸入流 | PushbackInputStream | PushbackReader | |||
特殊流 | DataInputStream | DataOutputStream |
其中基類都是抽象類,不同的子類對應不同的用途
首先我們看一下字節流與字符流的不同之處
字節流是由字節組成的,字符流是由字符組成的. Java里字符由兩個字節組成.字節流是最基本的,所有的InputStream和OutputStream的子類都是,主要用在處理二進制數據,它是按字節來處理的但實際中很多的數據是文本,又提出了字符流的概念,它是按虛擬機的encode來處理,也就是要進行字符集的轉化。
通俗的來講,字節流就是二進制流,通常的圖片,視頻,音頻文件都可以通過字節流來讀寫,字符流就是字符串,中文字符,等unicode字符編碼后的字符集。字節流可以通過轉換流(即InputStreamReader,InputStreamWriter)轉換為字符流(轉化的過程就是編碼的過程),緩沖流是為了提高讀寫效率提供的類,可以開辟出一個緩沖區用于高速存取數據流(分別對應字節流和字符流)。
字節流讀寫文件的實例public class FileCopy { public void fileCopy(String sourceFile,String targetFile) throws IOException{ FileInputStream in=new FileInputStream(sourceFile); FileOutputStream out=new FileOutputStream(targetFile); byte[] buffer=new byte[2048];//創建2048個字節大小的緩沖區(可根據拷貝文件大小自行定義) int value; while((value=in.read(buffer))!=-1){//循環讀寫 out.write(buffer, 0, value); } if(in!=null)in.close();//關閉i/o流 if(out!=null)out.close(); } public static void main(String[] args) throws IOException { String in="readFile.txt"; String out="outFile.txt"; FileCopy f=new FileCopy(); f.fileCopy(in, out); } }
文件拷貝不推薦用這種方法,此方法僅作為字節流轉字符流的實例,因為在文件copy中字節流轉化為字符流讀寫的意義不大,而且會降低運行效率
public class FileCopy { public void fileCopy(String sourceFile,String targetFile) throws IOException{ FileInputStream in=new FileInputStream(sourceFile); FileOutputStream out=new FileOutputStream(targetFile); BufferedReader reader=new BufferedReader(new InputStreamReader(in)); BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out)); String line=""; StringBuffer result=new StringBuffer(); while((line=reader.readLine())!=null){ writer.write(line);//此處的write是將數據寫入緩沖區,并沒有寫入文件 writer.flush();//將緩沖區數據寫入文件 } if(writer!=null)writer.close(); if(reader!=null)reader.close(); } public static void main(String[] args) throws IOException { String in="readFile.txt"; String out="outFile.txt"; FileCopy f=new FileCopy(); f.fileCopy(in, out); System.out.println("hell java"); } }
關鍵在于這兩行
BufferedReader reader=new BufferedReader(new InputStreamReader(in)); BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));
將FileInputStream作為參數傳入InputStreamReader中然后作為參數傳給BufferedReader,其中InputStreamReader作為Reader的子類傳入
我的文章列表
Email:sxh13208803520@gmail.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66956.html
摘要:一面試題及剖析今日面試題今天壹哥帶各位復習一塊可能會令初學者比較頭疼的內容,起碼當時讓我很有些頭疼的內容,那就是流。在這里壹哥會從兩部分展開介紹流,即與流。除此之外盡量使用字節流。關閉此輸入流并釋放與流相關聯的任何系統資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復習一塊可...
摘要:為了講清復用的是什么,首先得先說明一下邏輯流的概念。理解了這個,那么所謂的復用,指的就是在一個邏輯流里處理多個事件如何做到利用多路復用器,輪詢監聽各路,如果一旦有事件發生,那么就去處理,否則程序阻塞。 java nio提供了一套稱為I/O多路復用的編程范式,那么什么叫做I/O多路復用呢?所謂的I/O多路復用,從字面意思上來理解,就是:有多個I/O操作(或是寫,或是讀,或是請求),這多個...
字符流 Java平臺使用Unicode約定存儲字符值,字符流I/O自動將此內部格式與本地字符集進行轉換,在Western語言環境中,本地字符集通常是ASCII的8位超集。 對于大多數應用程序,具有字符流的I/O并不比具有字節流的I/O復雜,使用流類完成的輸入和輸出會自動轉換為本地字符集和從本地字符集轉換,使用字符流代替字節流的程序會自動適應本地字符集并為國際化做了準備 — 所有這些都無需程序員的額...
摘要:如果不指定字符集,則使用系統默認字符編碼,系統的默認字符編碼一般是。所以更準確的說,是將一個字節輸入流按照給定的字符編碼來解碼,從而得到一個字符輸入流。當然,缺點就是不能選擇使用的字符編碼。 相對于Python和 C來說,Java的I/O操作API比較復雜,因此本文打算做個簡單的介紹。 1. I/O分類 總的來說Java的I/O按照處理數據的粒度和方向來劃分,一共可以分為4類: 基...
I/O流 I/O流表示輸入源或輸出目標,流可以表示許多不同類型的源和目標,包括磁盤文件、設備、其他程序和內存數組。 流支持許多不同類型的數據,包括簡單字節、原始數據類型、本地化字符和對象,有些流只是傳遞數據,其他人以有用的方式操縱和轉換數據。 無論它們如何在內部工作,所有流都為使用它們的程序提供相同的簡單模型:流是一系列數據,程序使用輸入流從源讀取數據,一次一個條目: showImg(https:...
閱讀 3074·2021-11-19 09:40
閱讀 1559·2021-11-15 11:39
閱讀 662·2021-10-08 10:05
閱讀 2273·2021-09-03 10:29
閱讀 3406·2021-08-12 13:22
閱讀 2151·2019-08-30 15:54
閱讀 3706·2019-08-30 14:03
閱讀 2654·2019-08-30 13:45