IO流复习(总结):
格式:
特点(用处):
核心代码:
InputStream和OutPutStream:
特点:这是字节流的两个超类,用来读取和写入字节文件
核心代码:
int read(),int read(byte[] b),int read(int[],int off,int len)
void write(int b),void write(byte[] b),void write(byte[] b,int off, int len),void flush()
注意点:这里的int和byte其实是一样的。
FileInputStream和FileOutputStream:
特点:刚才超类的实现类
核心代码:
int read()
void write(byte b)或void write(int i)
注意点:在读取文件时,一定要保证文件是存在并且可读的
BufferedInputStream和BufferedOutputStream
特点:自带缓冲
核心代码:
int read(), void write(int i)
Reader和Writer:
特点:字符流的超类
BufferedReader+FileReader和BufferedWriter+FileWriter
特点:带缓冲的字符流
核心代码:
String readLine(),void write(String str),void newLine()
LineNumberReader
特点:Reader的实现类
核心代码:
LineNumberReader lr = new LineNumberReader(new FileReader("Example01.java");
String line = lr.readLine();
fw.write(lr.getLineNumber()+":"+line);
InputStreamReader和OutputStreamWriter
特点:Reader的实习类,转换类,会涉及到编码方式
核心代码:
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.txt"));
BufferedReader br = new BufferedReader(isr)
注意点:
转换后还是要用BUfferedReader来进行包装
ObjectInputStream和ObjectOutputStream
特点:用来实现对象的序列化,即把对象格式化为直接数据写入到硬盘。
注意点:对某个对象进行序列化时,必须保证带对象实现了Serializable接口
核心代码:
objectoutputstream oos = new ObjectOutputStream(new FileOutputStream("feriosa.txt");
oos.writeObject(new Person());
DataInputStream和DataOutputStream
特点:用于储存对象的成员数据(成员变量,成员函数),但这些成员数据只能是基本数据类型
核心代码:
它接收的是BufferedInputStream
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream...)))
dos.writeByte(Byte b),dos.writeChar(Char c),dos.writeBoolean(true),dos.writeUTF(String str)
PrintStream
特点:可以将基本数据类型和引用数据类型的对象格式化成字符串后输出,其输出主要依靠print()和println()方法,
它的构造方法里接受的是FileOutputStream和一个boolean
核心代码:
PrintStream ps = new PrintStreawm(new FileOutputStream("feriosa.txt"),true);
ps.print(Object o);
System.in\out\err
特点:标准流,in为InputStream,out和err是PrintStream。是属于控制台的三个方法
重定向的三个静态方法:(都是System类的)void setIn(InputStream in) void setOut(PrintStream out) void setErr(PrintStream out)
核心代码:
System.setIn(new FileINputStream("..."));
System.setOut(new PrintStream("...");
//System.in是字节流,要转换(读取键盘输入的字符
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
PipedInputStream和PipedOutputStream:
特点:使得对个线程之间能够通过IO流实现数据的传输
核心代码:
//建立连接:pis.connect(pos);
//传入PrintStream,使得打印的数据传入到pos中(说白了就是用bufferedReader读,用PrintStream写)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))---读取键盘
PrintStream ps = new PrintStream(pos)
ps.println(br.readLine())
ByteArrayInputStream+ByteArrayOutputStream和CharArrayReader+CharArrayWriter
特点:都是现将数据临时存入缓冲区
但我一直不明白他们和BufferedInputStream或BufferedReader区别在哪里。。。
核心代码:
特点是new对象的时候,不需要传参
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bos.write(int i_)---是将数据存入了缓冲区
如果要读缓冲区存的数据,new FileOutputStream("...").write(bos.toByteArray())
如果是读的话,就是传入数组,然后read()
SequenceInputStream:
特点:查单词得知sequence:n.[数]数列,序列;顺序;连续;片断插曲
所以它的特点就是对这些流进行合并
核心代码:
SequenceInputStream sis = new SequenceInputStream(fis1,fis2)
int sis.read()或者int sis.read(Byte[] b)
如果超过两个流的合并,就要用到Vector以及Enumeration枚举
vector.addElement(FileInputStream fis)
Enumereation e = vector.elements()
ok,这就是全部的IO流
fis.available()---返回可获得的字节长度
|