1. 程式人生 > >淺談Java IO流特性

淺談Java IO流特性

在java中流基本都封裝在java.io的包下。且大部分流都是以裝飾器的模式進行實現,提供了很多流操作的便捷性;以下淺談常見的幾種。

一、   二進位制流

二進位制位元組方式讀寫的流(位元組流沒有編碼的概念,轉換位元組需要考慮編碼,不能按行處理,使用不太方便)主要有:

  • InputStream、OutputStream: 二進位制位元組讀寫抽象型別的基類。

  • DataInputStream、DataOutputStream: 按基本型別和字串而非只是位元組讀寫流裝飾類,FilterInputStream、FilterOutputStream 裝飾基類的子類,在寫入時 DataOutputStream 會將這些型別的資料轉換為其對應的二進位制位元組,必須按照位元組讀取,效率較低。

  • BufferedInputStream、BufferedOutputStream: 對輸入輸出流提供緩衝功能的裝飾類,BufferedInputStream 內部有個位元組陣列作為緩衝區,讀取時先從這個緩衝區讀,緩衝區讀完了再呼叫包裝的流讀,BufferedOutputStream 的構造方法也有兩個,預設的緩衝區大小也是 8192,它的 flush 方法會將緩衝區的內容寫到包裝的流中。

  • FileInputStream、FileOutputStream: 輸入輸出目標是檔案的流,構造支援 File 型別和 String 檔名型別及追加覆蓋模式,以 byte 或 byte 陣列讀寫檔案,FileOutputStream 沒有緩衝,沒有重寫flush,呼叫 flush 沒有任何效果,資料只是傳遞給了作業系統,但作業系統什麼時候儲存到硬碟上是不一定的,按位元組讀取效率低。

  • ByteArrayInputStream、ByteArrayOutputStream: 輸入輸出目標是位元組陣列的流,陣列的長度是根據資料內容動態擴充套件的,ByteArrayOutputStream 無快取,同理 flush 無效。

  • PipedInputStream、PipedOutputStream:分別是管道輸入輸出流,作用是讓多執行緒可以通過管道進行執行緒間的通訊,在使用管道通訊時,必須將 PipedOutputStream 和 PipedInputStream 配套使用。

  • PrintStream:繼承於 FilterOutputStream 來裝飾其它輸出流的流。提供了自動 flush 和字符集設定功能。

二、文字字元流

  • Reader、Writer:字元流的抽象基類。

  • FileReader、FileWriter:輸入輸出目標是檔案的字元流,InputStreamReader、OutputStreamWriter 的子類,需要注意的是 FileReader、FileWriter 不能指定編碼型別,只能使用預設編碼,如果需要指定編碼型別可以使用 InputStreamReader、OutputStreamWriter。

  • InputStreamReader、OutputStreamWriter:介面卡類,輸入是 InputStream,輸出是 OutputStream,將位元組流轉換為字元流,一個重要的引數是編碼型別,如果沒有傳則為系統預設編碼。

  • CharArrayReader、CharArrayWriter: 輸入輸出目標是 char 動態調整陣列的字元流,類似 ByteArrayInputStream、ByteArrayOutputStream。

  • StringReader、StringWriter:輸入輸出目標是 String 的字元流,與 CharArrayReader、CharArrayWriter 類似。

  • BufferedReader、BufferedWriter:裝飾類,對輸入輸出流提供緩衝以及按行讀寫功能,FileReader、FileWriter 是沒有緩衝的、也不能按行讀寫,所以一般應該在它們的外面包上對應的緩衝類。

  • PrintWriter:裝飾類,可直接指定檔名作為引數、可以指定編碼型別、可以自動緩衝、可以自動將多種型別轉換為字串,在輸出到檔案時可以優先選擇該類。

  • PipedReader、PipedWriter:分別是字元管道輸入輸出流,作用是讓多執行緒可以通過管道進行執行緒間的通訊,在使用管道通訊時,必須將 PipedReader、PipedWriter 配套使用。


相關推薦

Java IO特性

在java中流基本都封裝在java.io的包下。且大部分流都是以裝飾器的模式進行實現,提供了很多流操作的便捷性;以下淺談常見的幾種。一、   二進位制流二進位制位元組方式讀寫的流(位元組流沒有編碼的概念,轉換位元組需要考慮編碼,不能按行處理,使用不太方便)主要有:InputS

JAVA位元組(讀寫檔案)

InputStream  此抽象類是表示位元組輸入流的所有類的超類。需要定義 InputStream 的子類的應用程式必須始終提供返回下一個輸入位元組的方法。  int available()  返回此輸入流方法的下一個呼叫方可以不受阻塞地從此輸入流讀取(或跳過)的位

Javaio類庫使用

簡單理解 java的io包括輸入流InputStream,輸出流OutputStream,File類等,具體結構如下圖所示: 在網路上的檔案傳輸有兩種方式,一種是字元流傳輸,一種是二進位制流傳輸(這裡的位元組流就是二進位制流,只是起了一個便於區分的名字)。 字元流的樣子是這樣的:

JAVA中的I/O(一)

今天學習了I/O流,所以和大家聊一下 關於I/O流的一些寫法與個人心得! 首先需要了解的就是什麼是流。流呢就是一連串的字元,它是根據先進先出的方式來進行傳送資訊的一種通道!那麼流可以具體用來做什麼呢?甚至說什麼樣的場景下我們才會用到流呢?I/O流的一個主

Java特性

學習Java有幾個月了,記錄下此時的體會與總結。結合Java體系結構、JVM原理和JDK原始碼,談談我對Java的理解及其特性的分析。 Java語言特性 SUN公司對Java的描述: “Java is a simple,object-or

Java三大特性

Java三大特性想必大家都不陌生:封裝、繼承以及多型。很多剛接觸Java的小夥伴都會想,它們到底有什麼了不得之處,又賦予Java這門程式語言什麼魔力呢?今天我們來探討一下吧~~ 首先,名詞解釋: 封裝,即是隱藏一切可隱藏的東西,對外界只提供最簡單的程式設計介面。比如,在一個類中,把資料和操作方法繫結起來,對資

java Io 類詳解

修改 文件目錄 != exe [] 深入 clas one fileinput 關於java 流類的復習;習慣性的復習按照圖結構一層層往下深入去了解去復習,最後通過代碼來實現感覺印象會更深刻一些; 關於 I/O流:IO可以理解為JAVA用來傳遞數據的管道

Java IO學習總結

系統 指針 數組 rar amr redo 修改 接收 學習 Java IO流學習總結 Java流操作有關的類或接口: Java流類圖結構: 流的概念和作用 流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱為流,流

java io 分析

decode string 對象 集成 piped fileread 一個 blog 文章 java io流 在java應用或者android應用中很常見,並且使用頻率很高的一個模塊。當時每次需要用到這個模塊的時候總是有提筆忘字的感覺,不知道該用哪個流或者該用誰包裝誰。

seall的Java IO總結

如果 com read 對稱 可能 對象實例化 它的 通過 兩個 Java流類圖結構: 流的概念和作用 流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱為流,流的本質是數據傳輸,根據數據傳輸特性將流抽象為各種類,方便更直觀

JAVA驗證碼~

puts oid blog 方式 log 需求 .html index.jsp script 這兩天在幫同學做個項目,項目中需要做個驗證碼,說實話那麽多年竟然沒註意過這東西,原理很簡單,貼出來給大家做個參考。 1、簡單介紹 一般稍微有些經驗的程序員都不會再自己寫原生驗證碼生

Java中的hashCode方法

implement state ask get() 存在 rsa key 沖突 如何 哈希表這個數據結構想必大多數人都不陌生,而且在很多地方都會利用到hash表來提高查找效率。在Java的Object類中有一個方法: public native int hashCode(

java io 數據 DataInputStream、DataOutputStream、ByteArrayInputStream、ByteArrayOutputStream

clas mat 分享 col -s 例子 oid 類型 write 例子程序: package io; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream;

Java IO

io 流 inputstream outputstream Java中的流,可以從不同的角度進行分類。按照數據流的方向不同可以分為:輸入流和輸出流。按照處理數據單位不同可以分為:字節流和字符流。按照實現功能不同可以分為:節點流和處理流。 輸出流: 輸入流:因此輸入和輸出都是從程序的角度來說的。

java內存分配和回收策略

內存空間 高效率 cde map details 閾值 老年代 total 關於 一、導論   java技術體系中所提到的內存自動化管理歸根結底就是內存的分配與回收兩個問題,之前已經和大家談過java回收的相關知識,今天來和大家聊聊java對象的在內存中的分配。通俗的講,對

Java集合框架

順序 eem map pre 叠代器 static 支持 print ted 集合框架最大的作用就是維護一組類型同樣的對象。僅僅是不同的類有不同的行為和性能。通常關註下面這些行為: 是否能存放反復的元素遍歷的順序是如何的是否支持多線程 以下首先介紹集合的經常使用,隨

Java的學習

override web ring 只知道 網頁標簽 insert語句 知識 reg 模型 Java就是用來做項目的!Java的主要應用領域就是企業級的項目開發!要想從事企業級的項目開發,你必須掌握如下要點: 1、掌握項目開發的基本步驟2、具備極強的面向對象的分析與設計技巧

慕課網_文件傳輸基礎——Java IO

一次 只讀 poi fileutil pat lar 一個 慕課網 inpu fadf 第1章 文件的編碼 1-1 文件的編碼 (15:07) 第2章 File 類的使用 2-1 File 類常用 API 介紹 (10:50) import java.io.File;

Java IO】File類的使用

parent static 技術 訪問 eat als 斜杠 rate 刪除 File類的使用 Java中的File類是在java.io.File中,Java.IO.File類表示文件或目錄。 File類只用於表示文件(目錄)的信息(名稱、大小等),不能用於文件內容

Java IO學習總結(轉)

rar output 出現 arr system 不存在 技術分享 輸出 寫入 原文地址:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html Java流操作有關的類或接口: Java流類圖結構: