流是什么
简单的说:流是字节从源到目的地运行的轨迹。
次序是有意义的,字节会按照次序进行传递。
在java.io包中,有一些流是结点流,即它们可以从一个特定的地方读写。
列如磁盘或者一块内存。其它流称作过滤器。一个过滤器输入流是用一个到已存在的输入流的连接创建的。此后,当你试图从过滤输入流对象读时,他向你提供来自另一个输入对象的字符
IO包中的基本流类
在java.io包中定义了一些流类。下图表明了包中的类层次。一些更公共的类将在后面介绍。
IO包中基本流类
InputStream:
1.SequenceInputStream 顺序
2.PipedInputStream 管道(必须掌握)
3.FilterInputStream 过滤器(必须掌握)
1.DataInputStream
2.PushbackInputStream 回推
3.BufferedInputStream 缓存(必须掌握)
4.ObjectInputStream (必须掌握)
5.ByteArrayStream 字节数组(必须掌握)
6.FileInputStream
FileInputStream和FileOutputStream
这些类是结点流,而且正如这个名字所暗示的那样,他们使用磁盘文件。
这些类的构造函数允许你所指定他们所连接的文件。要构造一个FileInputStream,所关联的文件必须存在而且是可读的,
如果你要构造一个FileOutputStream而输出文件已经存在,则他将被覆盖
BufferInputStream和BufferOutputStream
这些是过滤器流,他们可以提高i/o操作的效率
DataInputStream和DataOutputStream
DataInputStream方法
byte readByte
long readLong
double readDouble
DataOutputStream方法
void writeByte(byte)
void writeLong(long)
void writeDouble(double)
注意DataInputStream和DataOutputStream的方法是成对的
这些流都有读写字符串的方法,但不应当使用这些方法,他们已经被后面所讨论的读者和作者所去取代
PipedInputStream和PipedOutputStream
管道流用来在线程进行通信。一个线程的PipedInputStream对象从另一个线程的PipedOutStream对象
读取输入。用使管道流有用,必须有一个输入方和一个输出方
SequenceInputStream:允许你连接多个InputStream流,简单示例如下:
public static void mian(String args[]) throws Exception{
InputStream in1 = new FileInputStream("D:/temp/a.txt");
InputStream in2 = new FileInputStream("D:/temp/b.txt");
SequenceInputStream sin = new SequenceInputStream(in1,in2);
int c = 0;
while((c=sin.read())!=-1){
System.out.print((char) c);
}
in1.close();
in2.close();
sin.close();
}
InputStream方法
三个read方法
int read()
int read(byte [])
int read(byte[],int,int)
这三个方法提供对输入管道数据的存取。简单读方法返回一个ini值,他包含从流李
读出一个字节或者-1,其中后者表明文件结束。其它两种方法将数据读入到字节数组中,并返回所读的字节数。
第三个方法中的两个int参数指定了所要填入的数组的子范围
void close()
你完成流操作之后,就关闭这个流,如果你有一个流所组成的栈,使用过滤器流,
就关闭栈顶部的流。这个关机操作会关闭其余的流。
OutputStream方法
三个基本的write()方法
void write(int)
void write(byte [])
void write(byte [],int, int)
这些方法写输出流,和输入一样,总是尝试以实际最大的块进行写操作。
void close()
当你完成写操作后,就关闭输出流。如果你有一个流所组成的栈,就关闭栈顶部的流。
这个关闭操作会关闭其余的流。
void flush()
有时一个输出流在积累了若干次之后才进行真的的写操作。flush()方法允许你的强制执行写操作。
IO流编程的基本模型
1.构建源和目的地的连接
2.从源输出流
3.目的地接受流
4,关闭连接
例子:
package com;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileIO {
public void writeFile(){
String str = "this \n is a \n test";
try {
FileOutputStream out = new FileOutputStream("d:/temp/a.txt");
out.write(str.getBytes());
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 读文件
*/
public void readFile(){
try {
FileInputStream in = new FileInputStream("d:/temp/a.txt");
byte bs[] = new byte[100];
in.read(bs);
System.out.println("file content="+new String(bs));
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
FileIO io = new FileIO();
// io.readFile();
io.writeFile();
}
}