JAVA輸入輸出流(IO流)

      網(wǎng)友投稿 809 2025-04-01

      緩沖流

      緩沖流概述

      緩沖流也稱為高效流、或者高級流。之前學習的字節(jié)流可以稱為原始流。

      作用:緩沖流自帶緩沖區(qū)、可以提高原始字節(jié)流、字符流讀寫數(shù)據(jù)的性能

      緩沖流自帶緩沖區(qū)、可以提高原始字節(jié)流、字符流讀寫數(shù)據(jù)的性能

      字節(jié)緩沖流

      字節(jié)緩沖流自帶8KB緩沖區(qū),可以提高原始字節(jié)流、字符流讀寫數(shù)據(jù)的性能

      字節(jié)緩沖輸入流:BufferedInputStream,提高字節(jié)輸入流讀取數(shù)據(jù)的性能,讀寫功能上并無變化。

      字節(jié)緩沖輸出流:BufferedOutputStream,提高字節(jié)輸出流讀取數(shù)據(jù)的性能,讀寫功能上并無變化。

      構造器

      說明

      public?BufferedInputStream (InputStream?is)

      可以把低級的字節(jié)輸入流包裝成一個高級的緩沖字節(jié)輸入流管道,從而提高字節(jié)輸入流讀數(shù)據(jù)的性能

      public?BufferedOutputStream(OutputStream?os)

      可以把低級的字節(jié)輸出流包裝成一個高級的緩沖字節(jié)輸出流,從而提高寫數(shù)據(jù)的性能

      建議使用字節(jié)緩沖輸入流、字節(jié)緩沖輸出流,結(jié)合字節(jié)數(shù)組的方式,目前來看是性能最優(yōu)的組合。

      public class BufferInputTest1 { public static void main(String[] args) { try { InputStream is = new FileInputStream("D:\test\outputTest.txt"); BufferedInputStream bis = new BufferedInputStream(is); OutputStream os = new FileOutputStream("D:\test\outputTest3.txt"); OutputStream bos = new BufferedOutputStream(os); } catch (Exception e) { e.printStackTrace(); } } }

      字符緩沖流

      字符緩沖流自帶8K緩沖區(qū) 可以提高原始字符流讀寫數(shù)據(jù)的性能

      字符緩沖輸入流:BufferedReader,性能提升了,多了readLine()按照行讀取的功能

      作用:提高字符輸入流讀取數(shù)據(jù)的性能,除此之外多了按照行讀取數(shù)據(jù)的功能。

      字符緩沖輸出流:BufferedWriter,? 性能提升了,多了newLine()換行的功能

      作用:提高字符輸出流寫取數(shù)據(jù)的性能,除此之外多了換行功能

      構造器

      說明

      public?BufferedReader(Reader?r)

      可以把低級的字符輸入流包裝成一個高級的緩沖字符輸入流管道,從而提高字符輸入流讀數(shù)據(jù)的性能

      public?BufferedWriter (Writer?w)

      可以把低級的字符輸出流包裝成一個高級的緩沖字符輸出流管道,從而提高字符輸出流寫數(shù)據(jù)的性能

      import java.io.*; public class BufferReaderTest2 { public static void main(String[] args) { //1.創(chuàng)建一個字符輸入流管道與文件接通 try (Reader f = new FileReader("D:\test\outputTest.txt"); //包裝包裝成一個高級的緩沖字符輸入流管道 BufferedReader bf = new BufferedReader(f); ){ String s; while ((s = bf.readLine()) != null) System.out.println(s); } catch (Exception e) { e.printStackTrace(); } } }

      import java.io.BufferedWriter; import java.io.FileWriter; import java.io.Writer; public class BufferWriterTest3 { public static void main(String[] args) { //1.創(chuàng)建一個字符輸出流管道與目標接通 // 覆蓋管道,每次啟動都會清空文件之前的數(shù)據(jù) true---追加數(shù)據(jù),不覆蓋 try (Writer f = new FileWriter("D:\test\outputTest3.txt", true); //包裝 BufferedWriter bf = new BufferedWriter(f); ){ bf.write("我愛中國!"); bf.newLine(); //換行操作 bf.write("我愛中國!!"); bf.newLine(); bf.write("我愛中國!!!"); bf.newLine(); } catch (Exception e) { e.printStackTrace(); } } }

      轉(zhuǎn)換流

      可以解決亂碼問題

      使用字符輸入轉(zhuǎn)換流

      可以提取文件(GBK)的原始字節(jié)流,原始字節(jié)不會存在問題。

      然后把字節(jié)流以指定編碼轉(zhuǎn)換成字符輸入流,這樣字符輸入流中的字符就不亂碼了

      import java.io.*; public class InputS { public static void main(String[] args) { //代碼是utf-8格式-----讀取其他格式會亂碼 File f = new File("D:\test\Read-GBK.txt"); try (BufferedReader br = new BufferedReader(new FileReader(f)) ) { String line; while ((line = br.readLine()) != null) System.out.println(line); } catch (Exception e) { e.printStackTrace(); } } }

      字符輸入轉(zhuǎn)換流

      字符輸入轉(zhuǎn)換流:InputStreamReader,可以把原始的字節(jié)流按照指定編碼轉(zhuǎn)換成字符輸入流。

      public?InputStreamReader(InputStream?is)

      可以把原始的字節(jié)流按照代碼默認編碼轉(zhuǎn)換成字符輸入流。幾乎不用,與默認的FileReader一樣。

      public?InputStreamReader(InputStream?is?,String?charset)

      可以把原始的字節(jié)流按照指定編碼轉(zhuǎn)換成字符輸入流,這樣字符流中的字符就不亂碼了

      import java.io.*; public class InputS2 { public static void main(String[] args) { //代碼是utf-8格式-----讀取其他格式會亂碼 //使用字符輸入轉(zhuǎn)換流解決亂碼問題 File f = new File("D:\test\Read-GBK.txt"); try (InputStream is = new FileInputStream(f); Reader isr = new InputStreamReader(is, "GBK"); BufferedReader br = new BufferedReader(isr) ) { String line; while ((line = br.readLine()) != null) System.out.println(line); } catch (Exception e) { e.printStackTrace(); } } }

      字符輸出轉(zhuǎn)換流

      字符輸出轉(zhuǎn)換流:OutputStreamWriter,可以把字節(jié)輸出流按照指定編碼轉(zhuǎn)換成字符輸出流

      可以把字符以指定編碼獲取字節(jié)后再使用字節(jié)輸出流寫出去: “我愛你中國”.getBytes(編碼)

      也可以使用字符輸出轉(zhuǎn)換流實現(xiàn)。

      public?OutputStreamWriter(OutputStream?os)

      可以把原始的字節(jié)輸出流按照代碼默認編碼轉(zhuǎn)換成字符輸出流。幾乎不用。

      public?OutputStreamWriter(OutputStream?os,String?charset)

      可以把原始的字節(jié)輸出流按照指定編碼轉(zhuǎn)換成字符輸出流

      import java.io.*; public class OutputS3 { public static void main(String[] args) throws Exception { //字節(jié)輸出流 OutputStream os = new FileOutputStream("D:\test\Read-GBK.txt", true); //以設定格式寫入 Writer osw = new OutputStreamWriter(os, "GBK"); //包裝成高級的字符緩沖流 BufferedWriter bw = new BufferedWriter(osw); bw.write("中國我愛你!!!"); bw.close(); } }

      序列化對象

      對象序列化

      作用:以內(nèi)存為基準,把內(nèi)存中的對象存儲磁盤文件中去,稱為對象序列化。對象必須實現(xiàn)序列化接口

      對象序列化: 使用到的流是對象字節(jié)輸出流:ObjectOutputStream

      構造器

      說明

      public?ObjectOutputStream(OutputStream?out)

      把低級字節(jié)輸出流包裝成高級的對象字節(jié)輸出流

      方法名稱

      說明

      public?final?void?writeObject(Object?obj)

      把對象寫出去到對象序列化流的文件中去

      import java.io.Serializable; //對象要序列化,必須要實現(xiàn)Serializable接口 public class People implements Serializable { private static final long serialVersionUID = 1; //聲明序列化的版本號 private String name; private int age; // private transient int passwd; //transient修飾的變量不參與序列化 public People(String name, int age) { this.name = name; this.age = age; } public People(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "People{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

      import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class ObjectOutputS { public static void main(String[] args) throws Exception { People p = new People("小明", 20); //對象序列化 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\test\outputTest4.txt")); //調(diào)用序列化方法 oos.writeObject(p); //資源釋放 oos.close(); } }

      對象反序列化

      作用:以內(nèi)存為基準,把存儲到磁盤文件中去的對象數(shù)據(jù)恢復成內(nèi)存中的對象,稱為對象反序列化。

      使用到的流是對象字節(jié)輸入流:ObjectInputStream

      構造器

      說明

      public?ObjectInputStream(InputStream?out)

      把低級字節(jié)輸如流包裝成高級的對象字節(jié)輸入流

      方法名稱

      說明

      public?Object?readObject()

      把存儲到磁盤文件中去的對象數(shù)據(jù)恢復成內(nèi)存中的對象返回

      import java.io.FileInputStream; import java.io.ObjectInput; import java.io.ObjectInputStream; public class ObjectInputS2 { public static void main(String[] args) throws Exception { //1.創(chuàng)建對象字節(jié)輸入流 ObjectInput is = new ObjectInputStream(new FileInputStream("D:\test\outputTest4.txt")); //2.使用對象字節(jié)輸入流的反對象序列化 People p = (People) is.readObject(); is.close(); System.out.println(p); } }

      打印流

      PrintStream、PrintWriter

      作用:打印流可以實現(xiàn)方便、高效的打印數(shù)據(jù)到文件中去。兩者在打印功能上都是使用方便,性能高效(核心優(yōu)勢)

      打印流一般是指:PrintStream,PrintWriter兩個類。

      PrintStream繼承自字節(jié)輸出流OutputStream,支持寫字節(jié)

      PrintWrite繼承自字符輸出流Writer,支持寫字符

      可以實現(xiàn)打印什么數(shù)據(jù)就是什么數(shù)據(jù),例如打印整數(shù)97寫出去就是97,打印boolean的true,寫出去就是true。

      構造器

      說明

      public?PrintStream(OutputStream?os)

      打印流直接通向字節(jié)輸出流管道

      public?PrintStream(File??f)

      打印流直接通向文件對象

      JAVA輸入輸出流(IO流)

      public?PrintStream(String?filepath)

      打印流直接通向文件路徑

      方法

      說明

      public?void?print(Xxx?xx)

      打印任意類型的數(shù)據(jù)出去

      import java.io.PrintStream; public class PrintS { public static void main(String[] args) throws Exception { //1.創(chuàng)建一個打印流對象 PrintStream ps = new PrintStream("D:\\test\\outputTest5.txt"); ps.println(111); ps.println("aaaaa"); ps.println("看到這句話的都是大哥"); ps.close(); } }

      輸出語句的重定向

      屬于打印流的一種應用,可以把輸出語句的打印位置改到文件

      PrintStream ps = new PrintStream("文件地址"); System.setOut(ps);

      import java.io.PrintStream; public class PrintS2 { public static void main(String[] args) throws Exception { PrintStream ps = new PrintStream("D:\\test\\outputTest6.txt"); System.setOut(ps); System.out.println("你好!!"); System.out.println("我是xxx!!"); System.out.println("啦啦啦啦!!"); System.out.println("啦啦啦!!"); System.out.println("啦啦!!"); ps.close(); } }

      在此頁面也可查看

      https://blog.csdn.net/weixin_57780057/article/details/124571294?spm=1001.2014.3001.5501

      Java

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      上一篇:統(tǒng)計一行中c的個數(shù)(c語言統(tǒng)計一行文本中單詞的個數(shù))
      下一篇:Excel表格中字體改不了顏色的處理方法
      相關文章
      婷婷亚洲综合五月天小说| 亚洲中文无韩国r级电影| 亚洲欧洲精品无码AV| 亚洲成年人啊啊aa在线观看| 亚洲国产精品无码久久| 亚洲一区精品视频在线| 亚洲日本香蕉视频| 亚洲电影在线播放| 中文字幕亚洲第一在线| 97久久精品亚洲中文字幕无码 | 久久久久久久亚洲Av无码 | 色偷偷尼玛图亚洲综合| 噜噜综合亚洲AV中文无码| 亚洲丶国产丶欧美一区二区三区| 亚洲人成电影网站色| 在线aⅴ亚洲中文字幕| 中文字幕亚洲情99在线| 亚洲综合国产成人丁香五月激情| 亚洲成年网站在线观看| 亚洲s码欧洲m码吹潮| 女bbbbxxxx另类亚洲| 亚洲美女在线国产| 亚洲乳大丰满中文字幕| 久久精品亚洲日本佐佐木明希| 亚洲AV第一页国产精品| 亚洲第一成年网站大全亚洲| 91午夜精品亚洲一区二区三区| 亚洲一区动漫卡通在线播放| 亚洲中文字幕无码一去台湾| 亚洲精品乱码久久久久蜜桃| 国产成人亚洲精品播放器下载| 婷婷综合缴情亚洲狠狠尤物| 久久亚洲国产精品123区| 亚洲精品国产品国语在线| 亚洲激情中文字幕| 91午夜精品亚洲一区二区三区| 亚洲熟妇无码AV不卡在线播放| 日韩精品亚洲专区在线影视| 亚洲中文字幕视频国产| 国产精品亚洲аv无码播放| 中文字幕亚洲精品资源网|