摘要:使用字節(jié)流寫入文件,如果沒有關(guān)閉字節(jié)流操作,文件依然存在內(nèi)容,說明字節(jié)流是操作文件本身的。字節(jié)流比字符流更好,使用更廣泛。
Java知識(shí)點(diǎn)總結(jié)(JavaIO-字符流)
@(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO]
[toc]
在程序中一個(gè)字符等于兩個(gè)字節(jié),那么 Java 提供了 Reader 和 Writer 兩個(gè)專門操作字符流的類。
字符輸出流:Writer類定義如下:
public abstract class Writer extends Object implements Appendable,Closeable,F(xiàn)lushable
Appendable 接口表示內(nèi)容可以被追加,接收的參數(shù)是CharSequence,實(shí)際上 String 類就實(shí)現(xiàn)了此接口,所以可以直接通過此接口的方法向輸出流中追加內(nèi)容。
字符輸入流:Readerpublic abstract class Reader extends Object implements Readable,Closeable
import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class Demo04 { // 輸出文件內(nèi)容 public static void test1() throws IOException { File file = new File("E:" + File.separator + "test.txt"); Writer fw = new FileWriter(file); String str = "Hello world!"; fw.write(str); fw.close(); } // 追加文件內(nèi)容 public static void test2() throws IOException { File file = new File("E:" + File.separator + "test.txt"); Writer fw = new FileWriter(file, true); String str = " Hello world!"; fw.write(str); fw.close(); } // 從文件中讀取內(nèi)容 public static void test3() throws IOException { File file = new File("E:" + File.separator + "test.txt"); Reader fr = new FileReader(file); char[] c = new char[(int) file.length()]; int len = fr.read(c); // 返回值是讀取的字符數(shù) fr.close(); System.out.println("內(nèi)容是:" + new String(c, 0, len)); } // 使用循環(huán)方式讀取內(nèi)容 public static void test4() throws IOException { File file = new File("E:" + File.separator + "test.txt"); Reader fr = new FileReader(file); char[] c = new char[(int) file.length()]; int temp = 0; int len = 0; while((temp = fr.read()) != -1){ c[len] = (char)temp ; len ++; } fr.close(); System.out.println("內(nèi)容是:" + new String(c,0,len)); } // 強(qiáng)制性清空緩沖區(qū) public static void test5() throws IOException { File file = new File("E:" + File.separator + "test.txt"); Writer fw = new FileWriter(fil e); String str = "Hello world!"; fw.write(str); fw.flush(); //fw.close(); } public static void main(String[] args) { try { /*test1(); test2(); test4();*/ test5(); } catch (IOException e) { e.printStackTrace(); } } }字節(jié)流和字符流的區(qū)別
字符流在操作時(shí)使用了緩沖區(qū)(內(nèi)存),通過緩沖區(qū)再操作文件。
使用字節(jié)流寫入文件,如果沒有關(guān)閉字節(jié)流操作,文件依然存在內(nèi)容,說明字節(jié)流是操作文件本身的。
使用字符流寫入文件,如果沒有關(guān)閉字符流操作,文件中沒有任何內(nèi)容,這是因?yàn)樽址魇褂昧司彌_區(qū),關(guān)閉字符流時(shí)會(huì)強(qiáng)制性的將緩沖區(qū)中的內(nèi)容進(jìn)行輸出,但是如果程序沒有關(guān)閉,則緩沖區(qū)的內(nèi)容無法輸出,所以文件中沒有內(nèi)容。
緩沖區(qū):如果一個(gè)程序頻繁地操作一個(gè)資源(如文件或數(shù)據(jù)庫),則性能會(huì)很低,此時(shí)為了提升性能,就可以將一部分?jǐn)?shù)據(jù)暫時(shí)讀入到內(nèi)存的一塊區(qū)域之中,以后直接從此區(qū)域中讀取數(shù)據(jù)即可,因?yàn)樽x取內(nèi)存速度會(huì)比較快。
在字符流操作中,所有的字符都是在內(nèi)存中形成的,在輸出前會(huì)將所有的內(nèi)容暫時(shí)保存在內(nèi)存之中,所以使用了緩沖區(qū)暫存數(shù)據(jù)。
字節(jié)流比字符流更好,使用更廣泛 。
所有的文件在硬盤或傳輸時(shí)都是以字節(jié)的方式進(jìn)行的,包括圖片等都是按字節(jié)的方式存儲(chǔ)的,而字符是自由在內(nèi)存中才會(huì)形成,所以在開發(fā)中,字節(jié)流使用較為廣泛。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/69158.html
摘要:知識(shí)點(diǎn)總結(jié)轉(zhuǎn)換流知識(shí)點(diǎn)總結(jié)是的子類,將一個(gè)字符流的輸出對(duì)象變?yōu)樽止?jié)流的輸出對(duì)象。將字節(jié)輸出流轉(zhuǎn)為字符輸出流字節(jié)流轉(zhuǎn)為字符流蘋果將字節(jié)輸入流轉(zhuǎn)為字符輸入流內(nèi)容是 Java知識(shí)點(diǎn)總結(jié)(JavaIO-轉(zhuǎn)換流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault.com/img/bV82dQ?w=849&h=226); O...
摘要:知識(shí)點(diǎn)總結(jié)打印流知識(shí)點(diǎn)總結(jié)打印流是輸出信息最方便的類,主要包括字節(jié)打印流和字符打印流。可以打印任何數(shù)據(jù)類型,小數(shù),整數(shù),字符串等。格式化輸出姓名年齡分?jǐn)?shù)性別 Java知識(shí)點(diǎn)總結(jié)(JavaIO-打印流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] 打印流是輸出信息最方便的類,主要包括字節(jié)打印流(PrintStream)和字符打印流(PrintWriter)。 可...
摘要:知識(shí)點(diǎn)總結(jié)類知識(shí)點(diǎn)總結(jié)類用于從緩沖區(qū)中讀取內(nèi)容,所有的輸入字節(jié)數(shù)據(jù)都將放在緩沖區(qū)中中定義的構(gòu)造方法只能接收字符輸入流的實(shí)例,所以必須使用字符輸入流和字節(jié)輸入流的轉(zhuǎn)換類將字節(jié)輸入流轉(zhuǎn)變?yōu)樽址鳌? Java知識(shí)點(diǎn)總結(jié)(JavaIO- BufferedReader類) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault....
摘要:知識(shí)點(diǎn)總結(jié)字節(jié)流知識(shí)點(diǎn)總結(jié)字節(jié)流在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)時(shí)要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來時(shí),就要使用輸出流。字節(jié)流主要操作類型數(shù)據(jù),以數(shù)組為準(zhǔn),主要操作類是類和類。 Java知識(shí)點(diǎn)總結(jié)(JavaIO-字節(jié)流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] 字節(jié)流 在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保...
摘要:知識(shí)點(diǎn)總結(jié)合并流類知識(shí)點(diǎn)總結(jié)合并流的主要功能是將兩文件的內(nèi)容合并成一個(gè)文件字節(jié)在多文件的應(yīng)用場(chǎng)景下非常高效,因?yàn)槭菍⒍鄠€(gè)流串聯(lián)起來,形成一個(gè)流,便于操作 Java知識(shí)點(diǎn)總結(jié)(JavaIO- 合并流類 ) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault.com/img/bV9a9X?w=853&h=164); 合...
閱讀 2283·2019-08-30 10:51
閱讀 842·2019-08-30 10:50
閱讀 1553·2019-08-30 10:49
閱讀 3213·2019-08-26 13:55
閱讀 1658·2019-08-26 11:39
閱讀 3468·2019-08-26 11:34
閱讀 2017·2019-08-23 18:30
閱讀 3436·2019-08-23 18:22