摘要:字符轉(zhuǎn)換流原理字節(jié)流編碼表。和作為子類,僅作為操作字符文件的便捷類存在。源目的先根據(jù)需求明確要讀,還是要寫。屏幕網(wǎng)絡(luò)完全可以明確具體要使用哪個流對象。明確四是否需要額外功能呢額外功能轉(zhuǎn)換嗎轉(zhuǎn)換流。高效嗎緩沖區(qū)對象。
01轉(zhuǎn)換流概述
* A: 轉(zhuǎn)換流概述 * a: 轉(zhuǎn)換流概述 * OutputStreamWriter 是字符流通向字節(jié)流的橋梁:可使用指定的字符編碼表,將要寫入流中的字符編碼成字節(jié) * 將字符串按照指定的編碼表轉(zhuǎn)成字節(jié),在使用字節(jié)流將這些字節(jié)寫出去02轉(zhuǎn)換流_字符轉(zhuǎn)字節(jié)的過程
* A: 轉(zhuǎn)換流_字符轉(zhuǎn)字節(jié)的過程 * a.圖解 * 詳見day24_source/轉(zhuǎn)換流.JPG圖片03OutputStreamWriter寫文本文件
* A: OutputStreamWriter寫文本文件 * a: OutputStreamWriter * java.io.OutputStreamWriter 繼承Writer類 * 就是一個字符輸出流,寫文本文件 * write()字符,字符數(shù)組,字符串 * 字符通向字節(jié)的橋梁,將字符流轉(zhuǎn)字節(jié)流 * OutputStreamWriter 使用方式 * 構(gòu)造方法: * OutputStreamWriter(OuputStream out)接收所有的字節(jié)輸出流 * 字節(jié)輸出流: FileOutputStream * OutputStreamWriter(OutputStream out, String charsetName) * String charsetName 傳遞編碼表名字 GBK UTF-8 * OutputStreamWriter 有個子類, FileWriter * b: 案例代碼 public class OutputStreamWriterDemo { public static void main(String[] args)throws IOException { // writeGBK(); writeUTF(); } /* * 轉(zhuǎn)換流對象OutputStreamWriter寫文本 * 采用UTF-8編碼表寫入 */ public static void writeUTF()throws IOException{ //創(chuàng)建字節(jié)輸出流,綁定文件 FileOutputStream fos = new FileOutputStream("c:utf.txt"); //創(chuàng)建轉(zhuǎn)換流對象,構(gòu)造方法保證字節(jié)輸出流,并指定編碼表是UTF-8 OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); osw.write("你好"); osw.close(); } /* * 轉(zhuǎn)換流對象 OutputStreamWriter寫文本 * 文本采用GBK的形式寫入 */ public static void writeGBK()throws IOException{ //創(chuàng)建字節(jié)輸出流,綁定數(shù)據(jù)文件 FileOutputStream fos = new FileOutputStream("c:gbk.txt"); //創(chuàng)建轉(zhuǎn)換流對象,構(gòu)造方法,綁定字節(jié)輸出流,使用GBK編碼表 OutputStreamWriter osw = new OutputStreamWriter(fos); //轉(zhuǎn)換流寫數(shù)據(jù) osw.write("你好"); osw.close(); } }04轉(zhuǎn)換流_字節(jié)轉(zhuǎn)字符流過程
* A: 轉(zhuǎn)換流_字節(jié)轉(zhuǎn)字符流過程 * a: InputStreamReader * java.io.InputStreamReader 繼承 Reader * 字符輸入流,讀取文本文件 * 字節(jié)流向字符的敲了,將字節(jié)流轉(zhuǎn)字符流 * 讀取的方法: * read() 讀取1個字符,讀取字符數(shù)組 * 技巧 * OuputStreamWriter寫了文件 * InputStreamReader讀取文件 * OutputStreamWriter(OutputStream out)所有字節(jié)輸出流 * InputStreamReader(InputStream in) 接收所有的字節(jié)輸入流 * 可以傳遞的字節(jié)輸入流: FileInputStream * InputStreamReader(InputStream in,String charsetName) 傳遞編碼表的名字 * b: 圖解 * 詳見day24_source/轉(zhuǎn)換流.JPG圖片05InputSteamReader讀取文本文件
* A: InputSteamReader讀取文本文件 * a: 案例代碼 public class InputStreamReaderDemo { public static void main(String[] args) throws IOException { // readGBK(); readUTF(); } /* * 轉(zhuǎn)換流,InputSteamReader讀取文本 * 采用UTF-8編碼表,讀取文件utf */ public static void readUTF()throws IOException{ //創(chuàng)建自己輸入流,傳遞文本文件 FileInputStream fis = new FileInputStream("c:utf.txt"); //創(chuàng)建轉(zhuǎn)換流對象,構(gòu)造方法中,包裝字節(jié)輸入流,同時寫編碼表名 InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); char[] ch = new char[1024]; int len = isr.read(ch); System.out.println(new String(ch,0,len)); isr.close(); } /* * 轉(zhuǎn)換流,InputSteamReader讀取文本 * 采用系統(tǒng)默認編碼表,讀取GBK文件 */ public static void readGBK()throws IOException{ //創(chuàng)建自己輸入流,傳遞文本文件 FileInputStream fis = new FileInputStream("c:gbk.txt"); //創(chuàng)建轉(zhuǎn)換流對象,構(gòu)造方法,包裝字節(jié)輸入流 InputStreamReader isr = new InputStreamReader(fis); char[] ch = new char[1024]; int len = isr.read(ch); System.out.println(new String(ch,0,len)); isr.close(); } }06轉(zhuǎn)換流子類父類的區(qū)別
* A: 轉(zhuǎn)換流子類父類的區(qū)別 * a: 繼承關(guān)系 OutputStreamWriter: |--FileWriter: InputStreamReader: |--FileReader; * b: 區(qū)別 * OutputStreamWriter和InputStreamReader是字符和字節(jié)的橋梁:也可以稱之為字符轉(zhuǎn)換流。字符轉(zhuǎn)換流原理:字節(jié)流+編碼表。 * FileWriter和FileReader:作為子類,僅作為操作字符文件的便捷類存在。 當(dāng)操作的字符文件,使用的是默認編碼表時可以不用父類,而直接用子類就完成操作了,簡化了代碼。 * 以下三句話功能相同 * InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默認字符集。 * InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");//指定GBK字符集。 * FileReader fr = new FileReader("a.txt");07緩沖流概述
* A: 緩沖流概述 * a: 概述 * 可提高IO流的讀寫速度 * 分為字節(jié)緩沖流與字符緩沖流08字節(jié)輸出流緩沖流BufferedOutputStream
* A: 字節(jié)輸出流緩沖流BufferedOutputStream * a: BufferedOutputStream * 字節(jié)輸出流的緩沖流 * java.io.BufferedOuputStream 作用: 提高原有輸出流的寫入效率 * BufferedOuputStream 繼承 OutputStream * 方法,寫入 write 字節(jié),字節(jié)數(shù)組 * 構(gòu)造方法: * BufferedOuputStream(OuputStream out) * 可以傳遞任意的字節(jié)輸出流, 傳遞的是哪個字節(jié)流,就對哪個字節(jié)流提高效率 * b: 案例代碼 public class BufferedOutputStreamDemo { public static void main(String[] args)throws IOException { //創(chuàng)建字節(jié)輸出流,綁定文件 //FileOutputStream fos = new FileOutputStream("c:uffer.txt"); //創(chuàng)建字節(jié)輸出流緩沖流的對象,構(gòu)造方法中,傳遞字節(jié)輸出流 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:uffer.txt")); bos.write(55); byte[] bytes = "HelloWorld".getBytes(); bos.write(bytes); bos.write(bytes, 3, 2); bos.close(); } }09字節(jié)輸入流緩沖流BufferedInputStream
* A: 字節(jié)輸入流緩沖流BufferedInputStream * a: BufferedInputStream * 字節(jié)輸入流的緩沖流 * 繼承InputStream,標(biāo)準(zhǔn)的字節(jié)輸入流 * 讀取方法 read() 單個字節(jié),字節(jié)數(shù)組 * 構(gòu)造方法: * BufferedInputStream(InputStream in) * 可以傳遞任意的字節(jié)輸入流,傳遞是誰,就提高誰的效率 * 可以傳遞的字節(jié)輸入流 FileInputStream * b: 案例代碼 public class BufferedInputStreamDemo { public static void main(String[] args) throws IOException{ //創(chuàng)建字節(jié)輸入流的緩沖流對象,構(gòu)造方法中包裝字節(jié)輸入流,包裝文件 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:uffer.txt")); byte[] bytes = new byte[10]; int len = 0 ; while((len = bis.read(bytes))!=-1){ System.out.print(new String(bytes,0,len)); } bis.close(); } }10四種文件復(fù)制方式的效率比較
* A:四種文件復(fù)制方式的效率比較 * a: 四中復(fù)制方式 * 字節(jié)流讀寫單個字節(jié) 125250 毫秒 * 字節(jié)流讀寫字節(jié)數(shù)組 193 毫秒 OK * 字節(jié)流緩沖區(qū)流讀寫單個字節(jié) 1210 毫秒 * 字節(jié)流緩沖區(qū)流讀寫字節(jié)數(shù)組 73 毫秒 OK * b: 案例代碼 public class Copy { public static void main(String[] args)throws IOException { long s = System.currentTimeMillis(); copy_4(new File("c:q.exe"), new File("d:q.exe")); long e = System.currentTimeMillis(); System.out.println(e-s); } /* * 方法,實現(xiàn)文件復(fù)制 * 4. 字節(jié)流緩沖區(qū)流讀寫字節(jié)數(shù)組 */ public static void copy_4(File src,File desc)throws IOException{ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc)); int len = 0 ; byte[] bytes = new byte[1024]; while((len = bis.read(bytes))!=-1){ bos.write(bytes,0,len); } bos.close(); bis.close(); } /* * 方法,實現(xiàn)文件復(fù)制 * 3. 字節(jié)流緩沖區(qū)流讀寫單個字節(jié) */ public static void copy_3(File src,File desc)throws IOException{ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc)); int len = 0 ; while((len = bis.read())!=-1){ bos.write(len); } bos.close(); bis.close(); } /* * 方法,實現(xiàn)文件復(fù)制 * 2. 字節(jié)流讀寫字節(jié)數(shù)組 */ public static void copy_2(File src,File desc)throws IOException{ FileInputStream fis = new FileInputStream(src); FileOutputStream fos = new FileOutputStream(desc); int len = 0 ; byte[] bytes = new byte[1024]; while((len = fis.read(bytes))!=-1){ fos.write(bytes,0,len); } fos.close(); fis.close(); } /* * 方法,實現(xiàn)文件復(fù)制 * 1. 字節(jié)流讀寫單個字節(jié) */ public static void copy_1(File src,File desc)throws IOException{ FileInputStream fis = new FileInputStream(src); FileOutputStream fos = new FileOutputStream(desc); int len = 0 ; while((len = fis.read())!=-1){ fos.write(len); } fos.close(); fis.close(); } }11字符輸出流緩沖流BufferedWriter
* A: 字符輸出流緩沖流BufferedWriter * a: BufferedWriter * 字符輸出流緩沖區(qū)流 * java.io.BufferedWriter 繼承 Writer * 寫入方法 write () 單個字符,字符數(shù)組,字符串 * 構(gòu)造方法: * BufferedWriter(Writer w)傳遞任意字符輸出流 * 傳遞誰,就高效誰 * 能傳遞的字符輸出流 FileWriter, OutputStreamWriter * b: 案例代碼 public class BufferedWrierDemo { public static void main(String[] args) throws IOException{ //創(chuàng)建字符輸出流,封裝文件 FileWriter fw = new FileWriter("c:uffer.txt"); BufferedWriter bfw = new BufferedWriter(fw); bfw.write(100); bfw.flush(); bfw.write("你好".toCharArray()); bfw.flush(); bfw.write("你好"); bfw.flush(); bfw.write("我好好"); bfw.flush(); bfw.write("大家都好"); bfw.flush(); bfw.close(); } }12字符輸出流緩沖流BufferedWriter特有方法newLine
* A: 字符輸出流緩沖流BufferedWriter特有方法newLine * a: 方法介紹 * void newLine() 寫換行 * newLine()文本中換行, 也是文本換行 * 方法具有平臺無關(guān)性 * Windows * Linux * newLine()運行結(jié)果,和操作系統(tǒng)是相互關(guān)系 * JVM: 安裝的是Windows版本,newLine()寫的就是 * 安裝的是Linux版本,newLine()寫的就是 /* * 將數(shù)據(jù)源 c:a.txt * 復(fù)制到 d:a.txt 數(shù)據(jù)目的 * 字節(jié)輸入流,綁定數(shù)據(jù)源 * 字節(jié)輸出流,綁定數(shù)據(jù)目的 * * 輸入,讀取1個字節(jié) * 輸出,寫1個字節(jié) */ * b: 案例代碼 public class BufferedWrierDemo { public static void main(String[] args) throws IOException{ //創(chuàng)建字符輸出流,封裝文件 FileWriter fw = new FileWriter("c:uffer.txt"); BufferedWriter bfw = new BufferedWriter(fw); bfw.write(100); bfw.flush(); bfw.write("你好".toCharArray()); bfw.flush(); bfw.write("你好"); bfw.newLine(); bfw.flush(); bfw.write("我好好"); bfw.newLine(); bfw.flush(); bfw.write("大家都好"); bfw.flush(); bfw.close(); } }13字符輸入流緩沖流BufferedReader
* A: 字符輸入流緩沖流BufferedReader * a: 概述 * 從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取 * public String readLine() 讀取一個文本行,包含該行內(nèi)容的字符串,不包含任何行終止符,如果已到達流末尾,則返回 null14字符輸入流緩沖流BufferedReader讀取文本行
* A: 字符輸入流緩沖流BufferedReader讀取文本行 * a: BufferedReader * 字符輸入流緩沖流 * java.io.BufferedReader 繼承 Reader * 讀取功能 read() 單個字符,字符數(shù)組 * 構(gòu)造方法: * BufferedReader(Reader r) * 可以任意的字符輸入流 FileReader InputStreamReader * BufferedReader自己的功能 * String readLine() 讀取文本行 * 方法讀取到流末尾,返回null * b: 小特點 * 獲取內(nèi)容的方法一般都有返回值 * int 沒有返回的都是負數(shù) * 引用類型 找不到返回null * boolean 找不到返回false * c: 案例代碼 public class BufferedReaderDemo { public static void main(String[] args) throws IOException { int lineNumber = 0; //創(chuàng)建字符輸入流緩沖流對象,構(gòu)造方法傳遞字符輸入流,包裝數(shù)據(jù)源文件 BufferedReader bfr = new BufferedReader(new FileReader("c:a.txt")); //調(diào)用緩沖流的方法 readLine()讀取文本行 //循環(huán)讀取文本行, 結(jié)束條件 readLine()返回null String line = null; while((line = bfr.readLine())!=null){ lineNumber++; System.out.println(lineNumber+" "+line); } bfr.close(); } } /* * String line = bfr.readLine(); System.out.println(line); line = bfr.readLine(); System.out.println(line); line = bfr.readLine(); System.out.println(line); line = bfr.readLine(); System.out.println(line); line = bfr.readLine(); System.out.println(line); */15字符流緩沖區(qū)流復(fù)制文本文件
* A: 字符流緩沖區(qū)流復(fù)制文本文件 * a: 案例代碼 /* * 使用緩沖區(qū)流對象,復(fù)制文本文件 * 數(shù)據(jù)源 BufferedReader+FileReader 讀取 * 數(shù)據(jù)目的 BufferedWriter+FileWriter 寫入 * 讀取文本行, 讀一行,寫一行,寫換行 */ public class Copy_1 { public static void main(String[] args) throws IOException{ BufferedReader bfr = new BufferedReader(new FileReader("c:w.log")); BufferedWriter bfw = new BufferedWriter(new FileWriter("d:w.log")); //讀取文本行, 讀一行,寫一行,寫換行 String line = null; while((line = bfr.readLine())!=null){ bfw.write(line); bfw.newLine(); bfw.flush(); } bfw.close(); bfr.close(); } }16IO流對象的操作規(guī)律
* A: IO流對象的操作規(guī)律 * a: 明確一:要操作的數(shù)據(jù)是數(shù)據(jù)源還是數(shù)據(jù)目的。 * 源:InputStream Reader * 目的:OutputStream Writer * 先根據(jù)需求明確要讀,還是要寫。 * b: 明確二:要操作的數(shù)據(jù)是字節(jié)還是文本呢? * 源: * 字節(jié):InputStream * 文本:Reader * 目的: * 字節(jié):OutputStream * 文本:Writer * c: 明確三:明確數(shù)據(jù)所在的具體設(shè)備。 * 源設(shè)備: * 硬盤:文件 File開頭。 * 內(nèi)存:數(shù)組,字符串。 * 鍵盤:System.in; * 網(wǎng)絡(luò):Socket * 目的設(shè)備: * 硬盤:文件 File開頭。 * 內(nèi)存:數(shù)組,字符串。 * 屏幕:System.out * 網(wǎng)絡(luò):Socket * 完全可以明確具體要使用哪個流對象。 * d: 明確四:是否需要額外功能呢? * 額外功能: * 轉(zhuǎn)換嗎?轉(zhuǎn)換流。InputStreamReader OutputStreamWriter * 高效嗎?緩沖區(qū)對象。BufferedXXX * 已經(jīng)明確到了具體的體系上。17總結(jié)
* 把今天的知識點總結(jié)一遍。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67157.html
摘要:字節(jié)流可以處理所有以為單位存儲的文件,也就是說可以處理所有的文件,但是在處理字符的速度上不如字符流。文件字節(jié)輸入流的讀取時,是直接同字節(jié)流中讀取的。原理就是在字節(jié)流的基礎(chǔ)上增加了編解碼的操作。 前言 流是干什么的:為了永久性的保存數(shù)據(jù)。 IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸(上傳和下載文件) java對數(shù)據(jù)的操作是通過流的方式。 java用于操作流的對象都在IO包中。 java IO系統(tǒng)...
摘要:此類中的方法在關(guān)閉此流后仍可被調(diào)用,而不會產(chǎn)生任何。主要的功能是從緩沖區(qū)讀取字節(jié)構(gòu)造函數(shù)創(chuàng)建一個,使用作為其緩沖區(qū)數(shù)組。緩沖區(qū)會隨著數(shù)據(jù)的不斷寫入而自動增長。 內(nèi)存操作流 之前的所有的流操作都是針對文件的,但是有時候只是想要實現(xiàn)數(shù)據(jù)間轉(zhuǎn)換,此時如果我們想要創(chuàng)建一個文件然后再刪除文件,那樣顯得有點麻煩,因此此時的內(nèi)存操作流就顯得很適合這類的操作,因為它只是在內(nèi)存中存儲,并不會真正的創(chuàng)建文...
摘要:是字符流通向字節(jié)流的橋梁可使用指定的將要寫入流中的字符編碼成字節(jié)。編碼把能看懂的變成看不懂繼續(xù)自父類的共性成員方法寫入單個字符。刷新該流的緩沖。關(guān)閉此流,但要先刷新它。構(gòu)造方法創(chuàng)建使用默認字符編碼的。 package com.itheima.demo03.ReverseStream; import java.io.FileOutputStream;import java.io.IOEx...
摘要:字節(jié)流和字符流和和兩個抽象類是所有輸入流的基類本身并不能創(chuàng)建實例來執(zhí)行輸入但它們將成為所有輸入流的模板他們的方法是所有輸入流都可用的方法中包含如下三個方法從輸入流中讀取單個字節(jié)返回所讀取的字節(jié)數(shù)據(jù)字節(jié)數(shù)據(jù)可直接轉(zhuǎn)換為類型從輸入流中讀取最多個 字節(jié)流和字符流 InputStream和Reader InputStream和Reader兩個抽象類是所有輸入流的基類,本身并不能創(chuàng)建實例來執(zhí)...
摘要:字符流字符流是什么字符流是可以直接讀寫字符的流字符流讀取字符就要先讀取到字節(jié)數(shù)據(jù)然后轉(zhuǎn)為字符如果要寫出字符需要把字符轉(zhuǎn)為字節(jié)再寫出類的方法可以按照字符大小讀取通過項目默認的碼表一次讀取一個字符賦值給將讀到的字符強轉(zhuǎn)后打印字符流類的方法可以 1_字符流FileReader 1.字符流是什么 字符流是可以直接讀寫字符的IO流 字符流讀取字符, 就要先讀取到字節(jié)數(shù)據(jù), 然后轉(zhuǎn)為字符. ...
閱讀 2027·2019-08-30 15:52
閱讀 2987·2019-08-29 16:09
閱讀 1333·2019-08-28 18:30
閱讀 2462·2019-08-26 12:24
閱讀 1107·2019-08-26 12:12
閱讀 2282·2019-08-26 10:45
閱讀 578·2019-08-23 17:52
閱讀 840·2019-08-23 16:03