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