一、IO 流的三种分类方式
1. 按流的方向分为:输入流和输出流
2. 按流的数据单位不同分为:字节流和字符流
3. 按流的功能不同分为:节点流和处理流
二、IO 流的四大抽象类:
字符流:Reader Writer
字节流:InputStream (读数据)
OutputStream (写数据)
三、InputStream 的基本方法
int read () throws IOException 读取一个字节以整数形式返回,如果返回-1 已到输入流的末尾
void close () throws IOException 关闭流释放内存资源
long skip (long n ) throws IOException 跳过n 个字节不读
四、OutputStream 的基本方法
void write (int b ) throws IOException 向输出流写入一个字节数据
void flush () throws IOException 将输出流中缓冲的数据全部写出到目的地
五、Writer 的基本方法
void write (int c ) throws IOException 向输出流写入一个字符数据
void write (String str ) throws IOException 将一个字符串中的字符写入到输出流
void write (String str ,int offset ,int length )
将一个字符串从offset 开始的length 个字符写入到输出流
void flush () throws IOException
将输出流中缓冲的数据全部写出到目的地
六、Reader 的基本方法
int read () throws IOException 读取一个字符以整数形式返回,如果返回-1 已到输入流的末尾
七、节点流类型
八、访问文件之FileInputStream 和FileOutputStream 继承基类用于向文件中输入输出字节
九、访问文件之FileReader 和FileWriter 继承基类用于向文件中输入输出字符
----
输出流在构造函数第二个参数可以设置true
意义为跟在已有文件后进行输入
----
此类流会抛出FileNotFoundException
需要对其进行显示捕捉
十、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。
此处理流的构造方法都得传相对应的基类类型
BufferedReader :提供了readLine 方法用于高校读取一行字符串
BufferedWriter :提供了newLine 用于写入一个行分隔符也就是换行
BufferedInputStream 没多大用处
BufferedOutputStream 没多大用处
十一、转换流:主要作用将字节流转换成字符流。用处较大!
转换流在构造时可以指定其编码集合
InputStreamReader 需要和InputStream 套接
OutputStreamWriter 需要和OutputStream 套接
例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream (文件路径);
方法例:osw.getEncoding (); 获得流的编码方式
十二、数据流与字节数组流:
数据流主要为实现可以存取Java 原始数据类型如long ,boolean
数据流是字节流
DataInputStream 需要和InputStream 套接
DataOutputStream 需要和OutputStream 套接
DataInputStream 方法:readBoolean () readInt () read ……()……
readUTF ():网络传输常用方法 读一个Unicode 字符串
DataOutputStream 方法与DataInputStream 基本对应为写的方法
// 此构造函数等于已可以往一个字节数组里输入内容
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
// 此方法为获取一个字节数组方法返回字节数组
baos.toByteArray ();
// 此方法获取字节数组占了多少字节
new ByteArrayInputStream (一个字节数组)。available ()
1ByteArrayOutputStream baos =
2
new ByteArrayOutputStream();
3
DataOutputStream dos =
4
new DataOutputStream(baos);
5
try
{
6
dos.writeDouble(Math.random());
7
dos.writeBoolean(true);
8
ByteArrayInputStream bais =
9
new
ByteArrayInputStream(baos.toByteArray());
10
System.out.println(bais.available());
11
DataInputStream dis = new
DataInputStream(bais);
12
System.out.println(dis.readDouble());
13
System.out.println(dis.readBoolean());
14
dos.close();
dis.close();
15
} catch (IOException e) {
16
e.printStackTrace();
}
十二、Print
流
Print 流只有输出流无输入流,PrintWriter 和PrintStream 分别针对字符字节
两个类提供了重载的Print 和Println 方法用于多种数据类型的输出
PrintWriter 和PrintStream 的输出操作不会抛出异常
PrintWriter 和PrintStream 有自动flush 功能
----System.setOut( 接收OutputStream 类): 用于设置系统默认输出流
十二、Object 流
等同于c# 序列化,用直接将Object 写入或读出
transient 关键字为不序列化此成员变量
需要序列化的类必须实现Serializable 接口
主要方法:writeObject (Object ); readObject ();
读出为Object 类型需要强转数据类型
1 import java.io.*;
2
3 public class TestObjectIO {
4
public static void main(String args[]) throws Exception {
5
T t = new T();
6
t.k = 8;
7
FileOutputStream fos = new
FileOutputStream("d:/share/java/io/testobjectio.dat");
8
ObjectOutputStream oos = new
ObjectOutputStream(fos);
9
oos.writeObject(t);
10
oos.flush();
11
oos.close();
12
13
FileInputStream fis = new
FileInputStream("d:/share/java/io/testobjectio.dat");
14
ObjectInputStream ois = new
ObjectInputStream(fis);
15
T tReaded = (T)ois.readObject();
16
System.out.println(tReaded.i + "
" + tReaded.j + " " + tReaded.d + " " + tReaded.k);
17
18
}
19 }
20
21 class T
22
implements Serializable
23 {
24
int i = 10;
25
int j = 9;
26
double d = 2.3;
27
transient int k = 15; }
转自 http://www.sunxin.org/article/616.html