Thinking in java 琐碎知识点之 I/O流 、对象序列化(五)

2014-11-23 21:43:47 · 作者: · 浏览: 34
long start = System.currentTimeMillis(); copyText1(); //copyText2(); //copyText3(); long cost = System.currentTimeMillis() - start; System.out.println("耗时:" + cost+"ms"); } }
7. 字符流的缓冲区对象(也叫处理流、包装流)
利用数组提升了文件的读写速度,运行效率提升了

我们想到了效率问题,Java工程师( Oracle),也想到了提升效率
写好了字符流的缓冲区对象,目的提供流的写,读的效率

写入流的缓冲区对象BufferedWriter
BufferedWriter(Writer out)
参数Writer类型的参数,传递的参数是Writer类的子类对象
缓冲区,提供流的写的效率,哪个流的效率 FileWriter

void newLine() 写一个换行,具有跨平台
不用newLine()方法,也可以实现换行 \r\n

\r\n Windows下的换行符号
\n Linux下的换行符号

字符缓冲流示例
BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
import java.io.*;
public class BufferedWriterDemo {
	public static void main(String[] args)throws IOException {
		//字符输出流对象
		FileWriter fw=new FileWriter("F:\\f.txt");
		//建立缓冲区对象,提高输出流的效率
		BufferedWriter bfw=new BufferedWriter(fw);
		bfw.write("哈w哈");
		bfw.write("呵w呵");
		bfw.newLine();//写一行,BufferedReader可以读一行
		bfw.write("嘻w嘻");
		bfw.append("append");//追加写
		bfw.flush();
		bfw.close();
	}
}

读取流的缓冲区对象BufferedReader
BufferedReader(Reader in)
参数Reader类型参数,传递的是Reader类的子类对象
缓冲区,提供流的读的效率,哪个流的效率FileRreader


读取一行的方法 readLine(),文件末尾返回null
不是末尾返回字符串 String
字符缓冲流示例
BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
import java.io.*;
public class BufferedReaderDemo {
	public static void main(String[] args)throws IOException {
		//字符输出流对象
		FileReader fr=new FileReader("F:\\Thinking.txt");
		//建立缓冲区对象,提高输出流的效率
		BufferedReader bfw=new BufferedReader(fr);
		//读一行,返回字符串,末位返回null
		String line=null;
		while((line=bfw.readLine())!=null){
			System.out.println(line);
		}
		bfw.close();
	}
}
8、字节流
例程1:
import java.io.*;
public class InputStreamDemo {
	public static void main(String[] args)throws IOException {
		FileInputStream fis=new FileInputStream("F:\\Thinking.txt");
		byte[] bytes=new byte[1024];//1kb
		int len=0;
		len=fis.read(bytes);//len表示有效个数
		System.out.println(new String(bytes));
		System.out.println(len);
	} 
}

例程2:
import java.io.*;
public class OutPutStreamDemo {
	public static void main(String[] args) throws IOException{
		FileOutputStream fos=new FileOutputStream("F:\\f.txt");
		//写字节数组
		byte[] bytes={97,98,99};
		fos.write(bytes,0,bytes.length);//第二个参数是下标,第三个是写入的个数
		fos.write("\r\n".getBytes());//换行
		//写字符数组,只能将字符串转成字节数组,用String类方法getBytes
		fos.write(97);//写入了a字符
		fos.write("zpc".getBytes());
		fos.close();
	}
}
例程3:
import java.io.*;
public class CopyFile {
	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("E:\\KuGou\\屠洪刚-孔雀东南飞.mp3");
		FileOutputStream fos=new FileOutputStream("I:\\孔雀东南飞.mp3");
		int len=0;
		byte[] bytes=new byte[1024];
		while((len=fis.read(bytes))!=-1){
			fos.write(bytes,0,len);
		}
		fos.close();
		fis.close();
	}
}


例程4:
import java.io.*;
/*
 * 字节流读取键盘的输入
 * 用户一行一行的写,但是read方法每次只能读取一个字节,不方便
 * 能否一次读取一个行呢 可以使用转换流
 * 字节流转换成字符流后可以使用字符缓冲流按行读取
 */
public class KeyInDemo1 {
	public static void main(String[] args) throws IOException {
		InputStream in = System.in;// 返回字节输入流对象
		// int len=0;
		// len=in.read();//read方法每次只能读取一个字节
		// System.out.println(len);
		// 使用转换流将字节输入流转成字符输入流
		InputStreamReader isr = new InputStreamReader(in)