計算機中的IO字符流

2020-12-22 老楊分享

天下的「流」都一樣!只要是涉及到流的概念!都會想到舟行碧波上,人在畫中遊的場景。

計算機中按照流的概念主要分為:輸入流和輸出流。

上一文章了解到字節流。現在來了解一下字符流。

除了字節流和字符流之外,還有以下幾個流:轉換流,緩衝流,標準輸入輸出流,數據流等。

字符流一次只處理一個字符,根據流向可分為字符輸入流和字符輸出流。仔細看一下。字節流和字符流處理的數據是有區別的!一個一次處理一個字節,另一個是一次處理一個字符。

IO字符流也有相對應的方法!提供以下方法:

read() 讀取一個字符

read(char[] cbuf) 讀取多個字符到cbuf字符數組

read(char[] cbuf int offset,int len):讀取最多len個字符從offset位置開始存入字符數組cbuf中。

Reader字符輸入流。

Reader是抽象類,抽象類是不能創建對象的。一般都需要通過其子類創建對象,如果我們不創建子類的話是無法使用Reader,因為你要是使用的話就必須實現該類。這裡說到的子類創建對象都是確定性的數據源輸入流。

例如:FileReader文件字符輸入流,源數據就是文件,專門用於讀取文本文件。

代碼實現:

File file = newFile("d:\\javatest\\c.txt");

FileReader reader=new FileReader(file);

char[] cbuf=new char[2];

int len=0;

StringBuilder sb=new StringBuilder();

while((len=reader.read(cbuf))!=-1){

sb.append(cbuf,0,len);

}

System.out.println(sb.toString);

其實字符流和字節流的實現方法都大同小異,只要我們能get到那個點。理解好了,我們就能在計算機中使用。

Writer字符輸出流

其實不管是字節流還是字符流都離不開 」流「 這個概念。就好比江河流水,大海湖泊都離不開水流這一概念。大海湖泊在你看來沒有小溪和河流這種肉眼上就能看到的流通但實際上,大海湖泊還是會流動的,字節流和字符流也是如此!

Writer是字符輸出流的抽象父類,提供以下方法:

write() 寫入一個字符。

write(char[] cbuf) 寫入整個cbuf字符數組到目的地。

write(string):寫入一個字符串到目的地。

Writer是抽象類,不能創建對象。一般都需要通過其子類創建對象,子類都是確定性的目的地字符輸出流,例如FileWriter表示文件字符輸出流,目的地就是文件,專門用於寫入文本性文件。

File file = newFile("d:\\javatest\\d.txt");

1、建立字符輸出流通道。

FileWriter writer=null;

try{

writer = newFileWriter(file);

2、一次寫入一個字符串。

String str = "abc中國";

writer.write(str);

writer.write("你好");

3、flush。

writer.flush();

} catch(IOException e) {

e.printStackTrace();

} finally{

[4] 關閉流。

調用close之前會自動調用flush。

writer.close();

e.printStackTrace();}}

System.out.println("寫入完成");}}

總結:

在Writer的子類中,一般都存在一個字節緩衝區,這個緩衝區用於緩存編碼後的字節,當調用flush時,該字節緩存區都被寫入目的地,我們把這個過程稱為刷新緩衝區。當需要向文件已追加的方式寫入時,構造FileWriter的對象時,在構造方法FileWriter(File file, boolean append) 中append傳入true即可。

注意:默認情況下,FileWriter以平臺默認字符集寫入文件。(win簡體中文:GBK;unix/linux/mac UTF-8)。

字節流:InputSteam字節輸入流,OutputSteam字節輸出流。

字符流:Reader字符輸入流,Writer字符輸出流。

字節流一次只處理一個字節,字符流一次只處理一個字符。

字節對應字節,字符對應字符。

相關焦點

  • IO流之字符緩衝流BufferedWriter和BufferedReader
    BufferedReader_字符緩衝輸入流的使用方法一、BufferedWriter_字符緩衝輸出流的使用方法BufferedWriter 他是字符緩衝輸出流>BufferedWriter 繼承了Writer(java.io.BufferedWriter extends Writer )BufferedWriter 有兩個構造方法:BufferedWriter(Writer out) 創建一個使用默認大小輸出緩衝區的緩衝字符輸出流。
  • Java【IO系列】基礎篇—1. IO框架
    整理也就是重新學習的過程,在這個學習過程中,我一直嘗試著站在一個更高的角度來看問題,將這些類和接口的原理和思想理解的更加透徹一些!1. java io簡介java io系統的設計初衷,就是為了實現「文件、控制臺、網絡設備」這些io設置的通信。例如,對於一個文件,我們可以打開文件,然後進行讀取和寫入。
  • 夯實Java基礎系列16:一文讀懂Java IO流和常見面試題
    你既可以從流中讀取數據,也可以往流中寫數據。流與數據源或者數據流向的媒介相關聯。在Java IO中流既可以是字節流,也可以是字符流。然而你只能把有限的數據推回流中,並且你不能像操作數組那樣隨意讀取數據。流中的數據只能夠順序訪問。Java IO流通常是基於字節或者基於字符的。字節流通常以「stream」命名,比如InputStream和OutputStream。
  • 第十課 計算機中字符的編碼
    這一課主要介紹計算機中字符的編碼和漢字編碼以及計算機語言字符編碼        由於計算機的內部是以二進位數的形式進行存儲、運算、識別和處理的,因此,在計算機中,數據(如1、2、3、4、5、6、7、8)、字母(如A\B
  • 關於java用字節流和字符流讀取文件的各種情況
    官方微博:動力節點遇到的問題在用socket通信傳輸一個pdf文件以及其他的非txt文件的時候總是傳到服務端的文件出錯,後來發現是在用字符流和字節流在讀取各種文件上的差別所導致的
  • 在程序中如何正確地創建和銷毀軟體應用系統中文件IO流對象實例
    如下示圖中的程序代碼片段示例體現了Java語言中的IO流編程應用中所需要遵守的基本規則。3、JDK系統庫提供有java.io和java.nio兩種不同的系統程序包如下示圖為JDK系統庫幫助文檔中對Java的核心庫java.io包的功能說明局部截圖。
  • Java【IO系列】基礎篇—9. DataInputStream和DataOutputStream
    in.readFully(bytearr, 0, utflen); // 將「字節數組bytearr」中的數據 拷貝到 「字符數組chararr」中 // 注意:這裡相當於「預處理的輸入流中單字節的符號」,因為UTF-8是1-4個字節可變的。
  • 數字和字符在計算機中是如何儲存和表示?
    獲取更多精彩文章請關注云主宰蒼穹引言:隨著二十一世紀信息社會的發展和新興技術在不斷的發展,計算機在我們的日常生活中起著重要的作用,無論是生活、工作、學習還是整個社會,各行各業都似乎都離不開計算機技術了。
  • C++程序7 :IO流與異常處理
    age;int num;};  /*    流:流是由若干字節組成的字節序列         代表信息從源到目的的流動         流中內容:可以是二進位;ASCII碼;或其他形式         用類實現所有流操作---》流類體系結構*/int main()
  • 英文域名swipe.io以47萬元交易價成最貴.io域名!
    西部數碼(west.cn)6月12日消息,據外媒報導,英文域名swipe.io在國外park.io平臺以68000美元結拍,約合人民幣47萬元,是目前為止交易價最高的.io域名。主體「swipe」是通用英文單詞,有「揮擊、批評、抨擊」等意思;後綴.io原是英屬印度洋領地的簡寫,後因對應有io遊戲,多用於遊戲領域,同時也在物聯網領域被廣泛使用。整體說來,域名swipe.io比較適合搭建體育、娛樂、遊戲等終端平臺。據了解,域名Swipe.io是目前公開交易中價格最貴的.io域名,超越了此前交易價排在第一的lucky.io(67000美元)。
  • Java【IO系列】基礎篇—15. BufferedReader和BufferedWriter詳解
    BufferedReader 介紹BufferedReader 是緩衝字符輸入流。它繼承於Reader。BufferedReader 的作用是為其他字符輸入流添加一些緩衝功能。示例代碼關於BufferedReader中API的詳細用法,參考示例代碼(BufferedReaderTest.java):import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.File;import java.io.InputStream;
  • java之字符緩衝輸出流,BufferedWriter的簡單介紹
    各位小夥伴們,大家好在之前的文章中小編介紹了字節緩衝流的相關知識,這次小編要介紹的是字符緩衝輸出流,BufferedWriter,具體如下:java.io.BufferedWriter extends Writer
  • 「014期」JavaSE面試題(十四):基本IO流
    輸入流從文件中讀取數據存儲到進程(process)中,輸出流從進程中讀取數據然後寫入到目標文件。Q:Java中有幾種類型的流?和OutputStreamWriter字符流.png字節流.pngQ:字節流和字符流的區別?
  • 從輸入法的全形、半角聊起:計算機的那些字符編碼
    作為第一臺計算機的ENIAC採用的是十進位計算,所以在數學計算時不用任何轉換。但是二進位的EDVAC卻需要使用二進位「0101」這些數字表示十進位數字,這時計算機就使用了第一種編碼——BCD碼。BCD碼是用4位二進位數來表示十進位數中的0到9這10個數中的任意一位。
  • 兩分鐘時間:給你講解什麼叫IO流?
    >字符流 :以字符為單位讀寫數據的流,用於操作文本文件字符輸入流: Reader字符輸出流: Writer今天主要學習字節流:一般都是使用構造方法一,簡單方法,只要輸入路徑就好了,但是會出現②中的這種情況。而構造方法二就是解決這類問題的。可以先在file中加一個判斷,父路徑不存在就先創建目錄,再創建輸出流。
  • 淺談Java中字符串的初始化及字符串操作類
    對於這種直接通過雙引號""聲明字符串的方式, 虛擬機首先會到字符串常量池中查找該字符串是否已經存在. 如果存在會直接返回該引用, 如果不存在則會在堆內存中創建該字符串對象, 然後到字符串常量池中註冊該字符串。在本案例中虛擬機首先會到字符串常量池中查找是否有存在"hello"字符串對應的引用.
  • 計算機英語詞條小集合
    這段時間收集了一些不懂的計算機英語單詞,當初沒有認真學習英語,英語都是讓體育老師給教的😂😂,導致現在英語水平菜的一批。
  • 計算機教育中缺失的一課
    大學裡的計算機課程通常專注於講授計算機作業系統、計算機組成原理、計算機網絡等學院派的課程,以及某一門具體的程式語言,比如說 Java、C++/C,而對於如何精通工具這個主題往往不在講授的課程之內,需要同學們自行摸索。但實際上呢,某些工具的使用頻率高到可以使用一個成語來形容——朝夕相伴。
  • Java【IO系列】基礎篇—16. PrintWriter和RandomAccessFile詳解
    PrintWriter 介紹PrintWriter 是字符類型的列印輸出流,它繼承於Writer。PrintStream 用於向文本輸出流列印對象的格式化表示形式。它實現在 PrintStream 中的所有 print 方法。它不包含用於寫入原始字節的方法,對於這些字節,程序應該使用未編碼的字節流進行寫入。
  • CSharp 基礎知識系列-IO篇 流的操作
    前言繼續之前的C# IO流,在前幾篇小短片中我們大概看了下C# 的基礎IO也對文件、目錄和路徑的操作有了一定的了解。這一篇開始,給大家演示一下流的各種操作。以文件流為例,一起來看看如何操作吧。使用流適配器普通的流讀取和寫入都是使用字節數組,這在實際開發中非常不方便,所以C#又在流的基礎上開發了流適配器。C#中流適配器是指XXXReader或者XXXWriter,這種類在初始化的時候傳入一個流作為操作對象,然後對這個流進行一定的封裝,簡化了其操作方法。