标签:
一、流
java中把不同的输入、输出源(键盘、文件、内存、网络连接等)抽象表述为“流”(stream)
如上图所示,通过IO流,我们的程序要想访问内存、硬盘、网络等IO目的地,全通过IO流的方法就可以完成,统一了访问方法。
根据数据流方向的不同,可以将数据流分为输入流和输出流。如下图示,我们的程序通过输入流读取数据
输入流只能从中读取数据,而不能向其写出数据
输出流恰好相反
二、根据流中数据类型的不同,可以分为字节流和字符流,字节流传送的是字节数据(byte),字符流传送的是字符数据。
InputStream是所有字节输入流的顶层父类
int read()是其基本方法,返回的int表示读取的数据指向,如果到了流的末尾,则返回-1
FileInputStream表示指向文件的字节输入流
BufferedInputStream用于给流增加缓冲的功能
OutputStream为字节输出流的顶层父类
void write(int i)
FileOutputStream表示输出到文件的字节流
BufferedOutputStream用于给流增加缓冲的功能。
一个输入流/输出流的综合例子:实现文件的复制
package com.csu.test1; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class FileCopy { public static void main(String[] args) { try { InputStream is=new FileInputStream("D:/ex2.txt"); OutputStream os=new FileOutputStream("E:/ex2.txt"); BufferedInputStream bis=new BufferedInputStream(is); BufferedOutputStream bos=new BufferedOutputStream(os); int i=bis.read(); while(i!=-1){ bos.write(i); i=bis.read(); } bos.close();bis.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
三、字符流
字节流一次读取一个字节的数据,而字符流一次读取一个字符的数据。如“中a”两个字符,如果使用字节流读取,“中”字占有两个字节,读取两次,被转化成两个字符,所以会成为乱码。而用字节流,一个“中”字,只会读取一次,一次读取两个字节。
1.字符输入流(Reader),字符输入流的父类是Reader
InputStreamReader表示一个字节流转化成字符流的工具流。
FileReader 表示指向文件的字符输入流。
BufferedReader 表示给字符输入流增加缓冲功能的字符流。
int read()方法 读取一个字符的数据。
示例程序:将键盘字节流转化成字符流
package com.csu.test1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class KeyReaderTest { /** * * InputStreamReader将字节流转化为字符流 */ public static void main(String[] args) { InputStream is=System.in; System.out.println("Please input:"); //将字节流转化成字符流 Reader r=new InputStreamReader(is); BufferedReader br=new BufferedReader(r); //一次从流里读取一行 try { String line=br.readLine(); while(line!=null){ System.out.println(line); line=br.readLine(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2.字符输出流Writer
与Reader流类似
标签:
原文地址:http://www.cnblogs.com/chaofn/p/4569265.html