摘要:學(xué)習(xí)筆記三在整個(gè)包中,實(shí)際上就是分為字節(jié)流和字符流,但是除了這兩個(gè)流之外,還存在了一組字節(jié)流字符流的轉(zhuǎn)換類。是字節(jié)流通向字符流的橋梁它使用指定的讀取字節(jié)并將其解碼為字符。主要的功能還是向文件中寫入文件構(gòu)造函數(shù)創(chuàng)建使用默認(rèn)字符編碼的。
Java IO學(xué)習(xí)筆記三
InputStreamReader在整個(gè)IO包中,實(shí)際上就是分為字節(jié)流和字符流,但是除了這兩個(gè)流之外,還存在了一組字節(jié)流-字符流的轉(zhuǎn)換類。
OutputStreamWriter:是Writer的子類,將輸出的字符流變?yōu)樽止?jié)流,即:將一個(gè)字符流的輸出對象變成字節(jié)流的輸出對象。
InputStreamReader:是Reader的子類,將輸入的字節(jié)流變?yōu)樽址?,即:將一個(gè)字節(jié)流的輸入對象變成字符流的輸入對象。
一般在操作輸入輸出內(nèi)容就需要使用字節(jié)或字符流,但是有些時(shí)候需要將字符流變成字節(jié)流的形式,或者將字節(jié)流變?yōu)樽址鞯男问?,所以,就需要另外一組轉(zhuǎn)換流的操作類。
構(gòu)造函數(shù)InputStreamReader 是字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺(tái)默認(rèn)的字符集。
每次調(diào)用 InputStreamReader 中的一個(gè) read() 方法都會(huì)導(dǎo)致從底層輸入流讀取一個(gè)或多個(gè)字節(jié)。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,可以提前從底層流讀取更多的字節(jié),使其超過滿足當(dāng)前讀取操作所需的字節(jié)。
主要的功能還是從文件中讀取內(nèi)容,不過是一次性的讀取多個(gè)字節(jié),這個(gè)很像它的子類FileReader
常用方法InputStreamReader(InputStream in) 創(chuàng)建一個(gè)使用默認(rèn)字符集的 InputStreamReader,不過這里的InputStream是抽下類,因此可以使用它的子類FileInputStream實(shí)例化,這里的FileInputStream是操作字節(jié)流的,顯然看出這個(gè)類的作用就是字符流和字節(jié)流的橋梁
實(shí)例close()
int read() 讀取單個(gè)字符
int read(Char[] c) 讀取字符存儲(chǔ)在字符數(shù)組中
int read(char[] cbuf, int offset, int length) 將字符讀入數(shù)組中的某一部分
boolean ready() 判斷此流是否已經(jīng)準(zhǔn)備好用于讀取。
package IO; import java.io.*; /** * Created by chenjiabing on 17-5-24. */ public class demo4 { public static void main(String args[]) { File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt"); InputStreamReader inputStreamReader = null; try { inputStreamReader = new InputStreamReader(new FileInputStream(file)); //初始化 char[] c = new char[(int) file.length()]; //創(chuàng)建數(shù)組 try { int len = inputStreamReader.read(c); //將內(nèi)容讀取到數(shù)組中 System.out.println(len); for (int i = 0; i < c.length; i++) { System.out.print(c[i]); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); }finally { if(inputStreamReader!=null) { try { inputStreamReader.close(); //關(guān)閉 }catch (IOException e) { e.printStackTrace(); } } } } }
OutputStreamWriter注意:從上面的代碼中可以看到這個(gè)和FileReader的操作是一樣的,只是構(gòu)造的方法不一樣
構(gòu)造函數(shù)OutputStreamWriter 是字符流通向字節(jié)流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節(jié)。它使用的字符集可以由名稱指定或顯式給定,否則將接受平臺(tái)默認(rèn)的字符集。
每次調(diào)用 write() 方法都會(huì)導(dǎo)致在給定字符(或字符集)上調(diào)用編碼轉(zhuǎn)換器。在寫入底層輸出流之前,得到的這些字節(jié)將在緩沖區(qū)中累積??梢灾付ù司彌_區(qū)的大小,不過,默認(rèn)的緩沖區(qū)對多數(shù)用途來說已足夠大。注意,傳遞給 write() 方法的字符沒有緩沖。
主要的功能還是向文件中寫入文件
常用方法OutputStreamWriter(OutputStream out) 創(chuàng)建使用默認(rèn)字符編碼的 OutputStreamWriter。這里同樣是抽象類,所以用它的子類FileOutputStream實(shí)例化
實(shí)例close()
flush()
write(String str) 寫入字符串
void write(String str, int off, int len) 寫入字符串的某一部分。
write(int c) 寫入單個(gè)字符
void write(char[] cbuf, int off, int len) 寫入字符數(shù)組的某一部分。
package IO; import java.io.*; /** * Created by chenjiabing on 17-5-24. */ public class demo5 { public static void main(String[] args) { File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt"); OutputStreamWriter outputStreamWriter=null; try { outputStreamWriter=new OutputStreamWriter(new FileOutputStream(file,true)); String str="陳加兵 "; int data=48; String name="chenjiabing"; try { outputStreamWriter.write(str); outputStreamWriter.write(data); outputStreamWriter.write(name,0,2); //寫入字符串的一部分 }catch (IOException e) { e.printStackTrace(); } }catch (FileNotFoundException e) { e.printStackTrace(); }finally { if(outputStreamWriter!=null) { try { outputStreamWriter.flush(); outputStreamWriter.close(); }catch (IOException e) { e.printStackTrace(); } } } } }
參考文章從上面可以看出OutputStreamWriter和FileWriter的用法一樣
http://www.cnblogs.com/lich/archive/2011/12/11/2283848.html
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67125.html
摘要:是方法返回值的數(shù)據(jù)類型。方法名和參數(shù)表共同構(gòu)成方法簽名。構(gòu)造方法和它所在類的名字相同,但構(gòu)造方法沒有返回值。輸入流表示從一個(gè)源讀取數(shù)據(jù),輸出流表示向一個(gè)目標(biāo)寫數(shù)據(jù)。下圖是一個(gè)描述輸入流和輸出流的類層次圖。有多種構(gòu)造方法可用來創(chuàng)建對象。 我們經(jīng)常使用到 System.out.println(),那么它是什么呢? 一、系統(tǒng)方法 我們經(jīng)常使用到 System.out.println(),那么...
摘要:探索專為而設(shè)計(jì)的將探討進(jìn)行了何種改進(jìn),以及這些改進(jìn)背后的原因。關(guān)于最友好的文章進(jìn)階前言之前就寫過一篇關(guān)于最友好的文章反響很不錯(cuò),由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復(fù)雜的概念,只抓住關(guān)鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個(gè)可以進(jìn)行周月切換的日歷,左右滑動(dòng)的切換月份,上下滑動(dòng)可以進(jìn)行周,月不同的視圖切換,可以進(jìn)行事件的標(biāo)記,以及節(jié)假日的顯示,功能豐富 Andr...
摘要:目標(biāo)創(chuàng)建一個(gè)簡單的框架的程序,實(shí)現(xiàn)對數(shù)據(jù)庫的讀取操作。的核心配置文件核心配置文件,配置數(shù)據(jù)庫連接信息事物等每一個(gè)都需要在核心配置文件中注冊工具類獲取第一步獲取對象既然有了,顧名思義,我們可以從中獲得的實(shí)例。 ...
摘要:和方法用來設(shè)置線程是否成為守護(hù)線程和判斷線程是否是守護(hù)線程。守護(hù)線程依賴于創(chuàng)建它的線程,隨它的消亡而消亡。使用提供的方法,提醒線程終止,但是否真正終止由線程自己決定。參考實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)多線程干貨系列一多線程基礎(chǔ) 一、如何創(chuàng)建多線程 1、繼承Thread類 public class MyThread extends Thread { @Override public ...
摘要:今天開始整理學(xué)習(xí)多線程的知識(shí),談?wù)勛钪匾膬蓚€(gè)關(guān)鍵字和。但是這樣一個(gè)過程比較慢,在使用多線程的時(shí)候就會(huì)出現(xiàn)問題。有序性有序性是指多線程執(zhí)行結(jié)果的正確性。這種機(jī)制在多線程中會(huì)出現(xiàn)問題,因此可以通過來禁止重排。 今天開始整理學(xué)習(xí)多線程的知識(shí),談?wù)勛钪匾膬蓚€(gè)關(guān)鍵字:volatile和synchronized。 一、三個(gè)特性 1、原子性 所謂原子性操作就是指這些操作是不可中斷的,要么執(zhí)行過程...
閱讀 993·2021-11-04 16:08
閱讀 2972·2021-09-13 10:37
閱讀 506·2019-08-30 15:56
閱讀 1958·2019-08-30 15:55
閱讀 2238·2019-08-30 15:53
閱讀 2080·2019-08-30 13:13
閱讀 2921·2019-08-30 12:51
閱讀 1541·2019-08-29 16:06