? ? ? 以stream結(jié)尾都是字節(jié)流艇棕,以reader和writer結(jié)尾都是字符流,兩者的區(qū)別就是讀寫的時(shí)候一個(gè)是按字節(jié)讀寫串塑,一個(gè)是按字符沼琉。在實(shí)際使用時(shí)差不多。
? ? ? 在讀寫文件需要對(duì)內(nèi)容按行處理桩匪,比如比較特定字符打瘪,處理某一行數(shù)據(jù)的時(shí)候一般會(huì)選擇字符流。只是讀寫文件傻昙,和文件內(nèi)容無關(guān)的闺骚,一般選擇字節(jié)流。
package input;
import java.io.ByteArrayInputStream;
import java.io.IOException;
// 輸入字節(jié)流InputStream的實(shí)現(xiàn)
// 字節(jié)數(shù)組作為輸入源——ByteArrayInputStream
//
// 該類包括兩個(gè)構(gòu)造方法
//
// ByteArrayInputStream(byte[] buf);
// ByteArrayInputStream(byte[] buf,int offset,int length );
// 該類重寫了InputStream中的所有方法妆档,因此我們可以調(diào)用其父類同名的方法進(jìn)行讀寫操作葛碧。
//
// 下面是如何通過一個(gè)字節(jié)數(shù)組創(chuàng)建字節(jié)輸入流的過程,并從輸入流中讀取數(shù)據(jù)輸出到操作臺(tái)过吻。
public class TestByteArrayInputStream1 {
? ? public static void main(String[] args) throws IOException {
? ? ? ? // 初始化字節(jié)數(shù)組
? ? ? ? byte[] buf = new byte[3];
? ? ? ? buf[0] = 100;
? ? ? ? buf[1] = 101;
? ? ? ? buf[2] = 102;
? ? ? ? // 創(chuàng)建輸入流
? ? ? ? ByteArrayInputStream input = new ByteArrayInputStream(buf);
? ? ? ? // 從輸入流中讀取數(shù)據(jù)
? ? ? ? byte[] out = new byte[3];
? ? ? ? input.read(out);
? ? ? ? System.out.println(new String(out));
? ? ? ? // 關(guān)閉輸入流
? ? ? ? input.close();
// ? ? ? ? 只能讀取指定的字節(jié)數(shù)进泼,不能讀取的數(shù)據(jù)過多,有可能會(huì)超過內(nèi)存的限制
? ? }
}
package com.qfedu.c_reader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/*
? IO input Output
? 字節(jié)流:
? InputStream
? FileInputStream
? OutputStream
? FileOutputStream
? 字符流:
? 字符流 = 字節(jié)流? + 解碼
? 字符流讀取數(shù)據(jù)纤虽,輸入字符流
? ---| Reader 輸入字符流的基類/超類? 抽象類
? ------| FileReader 讀取文件的輸入字符流
使用方式:
1. 找到文件
判斷文件是否存在乳绕,是否是一個(gè)普通文件
2. 建立FileReader讀取通道
3. 讀取數(shù)據(jù)
4. 關(guān)閉資源
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
//readerTest2();?
}
public static void readerTest2() throws IOException {
long start = System.currentTimeMillis();
// 1. 找到文件:
File file = new File("");
// 判斷文件是否存在,是否是一個(gè)普通文件
if (!file.exists() || !file.isFile()) {
throw new FileNotFoundException();
}
// 2. 建立FileReder 輸入字符流管道
FileReader fr = new FileReader(file);
//3.建立緩沖區(qū)逼纸,利用緩沖區(qū)讀取數(shù)據(jù), 創(chuàng)建字符數(shù)組作為緩沖區(qū)
int length = -1; //用于保存讀取到的字符個(gè)數(shù)
char[] buffer = new char[1024];
while ((length = fr.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, length));
}
//4. 關(guān)閉資源
fr.close();
long end = System.currentTimeMillis();
System.out.println("耗時(shí):" + (end - start));
}
}