字元流和位元組流的區別 加入了自己的理解
【以下正文】
1 . 之前
○ 在程式中所有的資料都是以流的方式進行傳輸或儲存的,程式需要資料的時候要使用輸入流讀取資料,而當程式需要將一些資料儲存起來的時候,就要使用輸出流完成。
○ 程式中的輸入輸出都是以流的形式儲存的,流中儲存的實際上全都是位元組檔案。
2 . 位元組流與字元流
○ 在java.io包中操作檔案內容的主要有兩大類:位元組流、字元流,兩類都分為輸入和輸出操作。
○ 在位元組流中輸出資料主要是使用OutputStream類完成,輸入資料主要是使用InputStream類完成——主要用於處理位元組或二進位制物件。(byte[])
○ 在字元流中輸出資料主要是使用Writer類完成,輸入資料主要是使用Reader類完成——主要用於處理字元或字串。(String)
○ 位元組流可以處理任何型別的物件,包括二進位制物件。但是它不能直接處理Unicode字元。
○ 字元流可以處理Unicode字元、字串之類的。但是它處理不了物件。
○ 1字元 = 2位元組。
○ 字元流的處理單元為2個位元組的Unicode字元,位元組流的處理單元為1個位元組。
○ JAVA虛擬機器負責(用encode)將位元組轉化為2個位元組的Unicode字元。位元組流構造字元流。這實質就是String和byte[]的關係轉換。
○ 這是通過InputStreamReader和OutputStreamWriter完成的。(記憶:正好是InputSteam+Reader和OutputStream+Writer)
○ 檔案在磁碟上的儲存方式不是儲存字元,而是將字元編碼成位元組儲存。因此讀取和寫入檔案時,都是操作位元組。
3 . 操作位元組流/字元流的流程
①使用File類開啟一個檔案
②通過位元組流/字元流的子類,指定輸出位置
③做讀/寫操作
④最後關閉輸入/輸出流。因為這屬於資源操作,因此一定要關閉,釋放資源。
==============
4 . 舉例子:
站在記憶體和檔案的關係角度理解。
○ 記憶體→檔案:為“寫檔案操作”,用OutputStream(位元組流)和Writer(字元流)。
○ 記憶體←檔案:為“讀檔案操作”,用InputStream(位元組流)和Reader(字元流)。
【位元組流·寫】OutputStream的子類FileOutputStream類
寫一個字串到某個txt檔案中:利用OutputStream類(由於它被定義為abstract的,因此必須由子類例項化物件再去操作,即FileOutputStream類)
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class WriteStr{
public static void main(String args[]) throws IOException { //注意,要丟擲一個檔案找不到的IO異常
Output out = new FileOutputStream(f);
//因為是對一個檔案做讀寫操作,因此用File類的OutputStream。注意,對於FileOutputStream(f),再呼叫時,會覆蓋newFile.txt內容。若想追加內容,使用另一個建構函式FileOutputStream(File file, boolean append)。即FileOutputStream(f, true)就可以繼續在newFile.txt中追加內容了
String str = "The line to be writed into txt file."; //準備寫入的字串。另,“\r\n”可以用來表示換行符
byte[] b = str.getBytes(); //因為檔案的讀寫都是對位元組操作的,因此必須完成一個字元到位元組的轉換。利用getBytes可以做到。
out.write(b); //write()函式起到將位元組流輸出的作用
out.close(); //必須關閉IO操作,釋放資源
}
}
【位元組流·讀】InputStream類的子類FileInputStream類
從一個txt檔案中讀一串字串:利用InputStream類(由於它被定義為abstract的,因此必須由子類例項化物件再去操作,及FileInputStream類)
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputSream;
public class ReadStr{
public static void main(String args[]) throws IOException { //注意,要丟擲一個檔案找不到的IO異常
File f = new File("e:" + File.seperator + "newFile.txt"); //同上,利用變數f存放檔案資訊
Input in = new FileInputStream(f); //同上
byte[] b = new byte[(int) f.length()]; //注意:①new byte[...]了;②f.length()是預定義的函式,自動獲取f的檔案長度;③對f.length()需要強制轉換為int型
String str = new String(b); //注意,與寫入檔案不同的地方。需要把byte位元組型,轉換成String字元型寫進來
in.read(b);
in.close();
System.out.println(str); //同樣,列印str就可以了。
}
}
【字元流·寫】Writer類的子類FileWriter類
寫一個字串到某個txt檔案中:利用Writer類(由於它被定義為abstract的,因此必須由子類例項化物件再去操作,即FileWriter類)
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class WriteStr{
public static void main(String args[]){
File f = new File("e:" + File.seperator + "newFile.txt"); //同樣需要先獲取檔案資訊,存到變數f中
Writer out = new FileWriter(f, true); //true表示寫檔案的時候不是覆蓋原來的,而是追加到末尾
String str = "Hello World!";
out.write(str); //直接寫入字串str就可以了。字元流可以直接操作,不需要轉換成byte型
out.close(); //釋放IO資源
}
}
【字元流·讀】Reader類的子類FileReader類
從一個txt檔案中讀一串字串:利用Reader類(由於它被定義為abstract的,因此必須由子類例項化物件再去操作,及FileReader類)
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class ReadStr{
public static void main(String args[]){
File f = new File("e:" + File.seperator + "newFile.txt");
Reader in = new FileReader(f);
char[] c = new char[1024]; //因為讀出來的是byte位元組陣列,因此要轉化成一個字元陣列輸出,先new一塊空間
int len = in.read(c); //需要確定檔案內文字的長度
in.close(); //釋放IO資源,字元流不先釋放IO資源,無法列印
System.out.println(new String(c, 0, len)); //因為讀出來的內容還是位元組流byte陣列,因此要轉化成字元流String陣列
}
}
5 . 字元流和位元組流在記憶體方面的區別:
○ 位元組流直接操作檔案,不經過記憶體;
○ 字元流間接操作檔案,經過記憶體,再到檔案。
○ 位元組流即使不close()操作,也可以寫入檔案;
○ 字元流如果不先close()操作,只會存在記憶體的緩衝區,不會寫入檔案。
相關推薦
字元流和位元組流的區別 加入了自己的理解
【以下正文】 1 . 之前 ○ 在程式中所有的資料都是以流的方式進行傳輸或儲存的,程式需要資料的時候要使用輸入流讀取資料,而當程式需要將一些資料儲存起來的時候,就要使用輸出流完成。 ○ 程式中的輸入輸出都是以流的形式儲存的,流中儲存的實際上全都是位
【筆面試】字元流和位元組流的區別以及如何解決亂碼問題
工作中經常遇到java編碼問題,由於缺乏研究,總是無法給出確切的答案,這個週末在網上查了一些資料,在此做些彙總。 問題一:在java中讀取檔案時應該採用什麼編碼? Java讀取檔案的方式總體可以分為兩類:按位元組讀取和按字元讀取。按位元組讀取就是採用InputStre
java 字元流和位元組流的比較
IO分兩種流位元組流 InputStream OutputStream字元流 Reader Writer他們都是抽象類具體實現位元組流 FileInputStream FileOutputStream字元流 FileReader FileWriter 字元流處理的單元為2個
JAVA IO流——字元流和位元組流的粗淺理解
本人在使用IO流是經常在選擇是output還是input,reader還是writer中糾結一會,歸根結底還是沒有對IO流方向問題擁有自己的理解。 位元組流和字元流,顧名思義,前者和位元組打交道,後者和字元打交道。 位元組流和字元流都分為輸入和輸出兩個方向,
分別使用(字元流)和(位元組流)對檔案進行讀寫操作
一.使用(字元流)對檔案進行讀寫操作/* * 使用字元流對檔案進行讀寫操作 */ import java.io.BufferedReader; import java.io.FileInputSt
Java 字元流和位元組流-學習筆記
一:字元流 Reader和Writer(基類) FileReader和FileWriter(定義字元輸入、輸出流) BufferedReader和BufferedWriter(字元帶緩衝輸入、輸出流) LineNumberReader 二:字元流拷貝檔案,4中方式 1.FileReader和
IO流字元流和位元組流的不同使用
源頭: Reader (字元流) 和 InputStream(位元組流) 目標 Writer(字元流)和 OutputStream(位元組流) 裝置 鍵盤 硬碟 控制檯 高效率操作 字元流: BufferedReader BuffereWr
Java中List和ArrayList的區別(加入了個人見解)
轉載自:http://www.cnblogs.com/aisiteru/articles/1151874.html 第一次看這篇文章時,是在CSDN部落格中看到的,作者寫的初衷還是蠻好的,但是確實有錯誤的地方和不是很明白的地方。於是就很想去看看原文,
java之字元流與位元組流的區別和聯絡
流,用來處理輸入和輸出,主要是和檔案系統打交道,把計算機的處理結果儲存到檔案中,把檔案中的內容讀取到記憶體中,這些都需要流操作來完成。 IO = Input / Output = 輸入 / 輸出 Java IO 流
Java I/O流複習(二)—字元流、字元緩衝流、以及和位元組流的區別
Java I/O流複習(二) 1 字元輸入流 字元流(Java IO的Reader和Writer)功能與InputStream和OutputStream非常類似,InputStream和OutputStream基於位元組處理,而字元流(Reader和Writ
3.7 Java之列印流和資料流(附字元位元組流練習)
列印流 例項 資料流 資料流輸出 資料流輸入 字元位元組流練習 位元組流輸出 字元流輸出
Java:位元組流和字元流(輸入流和輸出流)
什麼是流 如果想學習Java工程化、高效能及分散式、深入淺出。微服務、Spring,MyBatis,Netty原始碼分析的朋友可以加我的Java高階交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型網際網路技術的視訊免費分享給大家。 流是個抽象的概念,是對輸入輸出裝置的抽象,輸
位元組流與字元流,位元組流和字元流的使用哪個多? java 讀寫操作大檔案 BufferedReader和RandomAccessFile
一 首先我們要知道 在程式中所有的資料都是以流的方式進行傳輸或儲存的 而流有兩種 位元組流用來處理位元組或二進位制物件 字元流主要用來處理字元或字串,一個字元佔兩個位元組 而上一篇的java 讀寫操作大檔案 BufferedReader和RandomAccessFile Buf
Java:IO流:探究位元組流和字元流
前言---- 本來不想寫前言了,但是寫完,發現寫得太好了,遇到就好好看一看啊!!!! 注:歡迎轉載,轉載請註明來處 目錄 一. 簡單理解什麼是流? 我是把流理解成一個導管,這個導管連線了硬碟中的某個檔案和程式. 輸入流:輸入資料
Java基礎之IO流(位元組流、字元流、記憶體流、帶快取的流、序列化和反序列化)
File類:File類提供了對檔案的操作,可以通過字串或URI來構建一個File類物件。通過物件,可以實現檔案的建立(createNewFile)、刪除(delete)、獲得檔名(getName)、獲得父目錄物件(getParentFile)、獲得父目錄名稱(
位元組流 字元流 和 轉換流
位元組流位元組流 又稱 萬能流 不但可以讀寫文字,還可以讀寫圖片 音訊 視訊使用位元組流進行 檔案的複製需要對異常進行處理 且計算複製時間long start = System.currentTimeMillis(); // 被讀檔案 File file1 = new
Java的位元組流,字元流和緩衝流對比探究
[TOC] ## 一、前言 所謂IO,也就是Input/Output。Java程式跟外部進行的資料交換就叫做Java的IO操作。程式中資料的輸入輸出,被抽象為流, 按照相對於程式的流向,可分為輸出流和輸入流。 **按照資料流的格式,可分為位元組流和字元流**。Java IO流的體系很龐大,功能豐富。 本
float 浮動 文檔流和文字流區別
關於 photo cli btn 元素 title comment div 顯示 源自:2-2 浮動的基礎知識 關於float屬性的脫離文檔流的問題 看完視頻後,教材裏說的使用float浮動後,元素雖然會脫離文檔流,但還處在文本流的位置當中,所以就不會出現重疊的效果嗎?
java IO字元流與位元組流簡單使用示例
1.Reader && Writer Reader java.lang.Object |-- java.io.Reader//常用方法 |-- int read() //讀取單個字元 |--
File,字元流,位元組流
File: 檔案和目錄路徑名的抽象表示形式 構造方法: public File(String pathname) 通過給定的檔案或資料夾的路徑,來建立對應的File物件 public File(String parent, String child) 通過給定的父資料夾路徑,與給定