字节流+字符流
1、 IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸
?a) 上傳文件
?b) 下載文件
2、 Java對數(shù)據(jù)的操作都是通過流的方式
3、 Java 用于操作流的對象都在IO包中
4、 IO流分類
?a) 流向
??i. 輸入流:程序讀取數(shù)據(jù)
??ii. 輸出流:程序向硬盤寫入數(shù)據(jù)
?b) 數(shù)據(jù)類型
??i. 字節(jié)流:
???1. 字節(jié)輸入流 讀數(shù)據(jù) InputStream
???2. 字節(jié)輸出流 寫數(shù)據(jù) OutPutStream
??ii. 字符流:為了方便操作文本數(shù)據(jù)
???1. 字符輸入流 讀數(shù)據(jù) Reader
???2. 字符輸出流 寫數(shù)據(jù) Writer
?c) 默認按照數(shù)據(jù)類型進行分類。
5、基本流和高級流
?基本流:可以直接操作文件的
??FileInputStream
??FileOutputStream
??FileReader
??FileWriter
??…………
?高級流:在基本流基礎(chǔ)上提供一些其他功能
?其中PrintStream、PrintStream既是基本流又是高級流
6、 總結(jié)
?a) 字符流復(fù)制數(shù)據(jù)5種方式:
??i. 字符緩沖區(qū)每次復(fù)制一個字符數(shù)組
??ii. 字符緩沖區(qū)每次復(fù)制一個字符
??iii. 每次復(fù)制一個字符數(shù)組
??iv. 每次復(fù)制一個字符
??v. 每次復(fù)制一行數(shù)據(jù)
?b) 字節(jié)流復(fù)制數(shù)據(jù)的4種方式
??i. 字節(jié)緩沖區(qū)每次復(fù)制一個字節(jié)數(shù)組
??ii. 字節(jié)緩沖區(qū)每次復(fù)制一個字節(jié)
??iii. 每次復(fù)制一個字節(jié)數(shù)組
??iv. 每次復(fù)制一個字節(jié)
?復(fù)制文件
publicclass CopyFileTest {
??? publicstaticvoid main(String[] args) throws IOException {
??????? //1,明確源和目的。
??????? File srcFile = new File("c:\\YesDir\test.JPG");
??????? File destFile = new File("copyTest.JPG");
???????
??????? //2,明確字節(jié)流 輸入流和源相關(guān)聯(lián),輸出流和目的關(guān)聯(lián)。
??????? FileInputStream fis = new FileInputStream(srcFile);
??????? FileOutputStream fos = new FileOutputStream(destFile);
???????
??????? //3, 使用輸入流的讀取方法讀取字節(jié),并將字節(jié)寫入到目的中。
??????? int ch = 0;
??????? while((ch=fis.read())!=-1){
??????????? fos.write(ch);
??????? }
??????? //4,關(guān)閉資源。
??????? fos.close();
??????? fis.close();
??? }
}
上述代碼輸入流和輸出流之間是通過ch這個變量進行數(shù)據(jù)交換的。
上述復(fù)制文件有個問題,每次都從源文件讀取一個,然后在寫到指定文件,接著再讀取一個字符,然后再寫一個,一直這樣下去。效率極低
?? 緩沖數(shù)組方式復(fù)制文件
publicclass CopyFileByBufferTest {
??? publicstaticvoid main(String[] args) throws IOException {
??????? File srcFile = new File("c:\\YesDir\test.JPG");
??????? File destFile = new File("copyTest.JPG");
??????? // 明確字節(jié)流 輸入流和源相關(guān)聯(lián),輸出流和目的關(guān)聯(lián)。
??????? FileInputStream fis = new FileInputStream(srcFile);
??????? FileOutputStream fos = new FileOutputStream(destFile);
??????? //定義一個緩沖區(qū)。
??????? byte[] buf = newbyte[1024];
??????? int len = 0;
??????? while ((len = fis.read(buf)) != -1) {
??? ??????? fos.write(buf, 0, len);// 將數(shù)組中的指定長度的數(shù)據(jù)寫入到輸出流中。
??????? }
??????? // 關(guān)閉資源。
??????? fos.close();
??????? fis.close();
??? }
}
速度要快
?
復(fù)制文本文件
我們一般用字符流復(fù)制文本文件
publicclass CopyTextFileTest {
??? publicstaticvoid main(String[] args) throws IOException {
??????? copyTextFile();
??? }
??? publicstaticvoid copyTextFile() throws IOException {
??????? //1,明確源和目的。
??????? FileReader fr = new FileReader("c:\\cn.txt");
??????? FileWriter fw = new FileWriter("c:\\copy.txt");
??????? //2,為了提高效率。自定義緩沖區(qū)數(shù)組。字符數(shù)組。
??????? char[] buf = newchar[1024];
??????? int len = 0;
??????? while((len=fr.read(buf))!=-1){
??????????? fw.write(buf,0,len);
??????? }
??????? /*2,循環(huán)讀寫操作。效率低。
??????? intch = 0;
??????? while((ch=fr.read())!=-1){
??????????? fw.write(ch);
??????? }
??????? */
??????? //3,關(guān)閉資源。
??????? fw.close();
??????? fr.close();
??? }
}
轉(zhuǎn)載于:https://www.cnblogs.com/sy130908/p/11474416.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: System类+Math类+Arrays
- 下一篇: 不用去验血,对照这张表,就能知道自己缺啥