复习:
FileInputStream:
没有该文件会报FileNo异常
FileOutputStream:
创建新文件,追加
Properties:
配置文件,把代码中一些可能发生改变的数据写到配置文件中,可以使代码变灵活,,,代码不用改,只需该配置文件的值
hashtable的子类
3.4: 字节流:PipedInputStream/PipedOutputStream 管道输入/输出流。一般结合线程来用。
问题一:管道输入/输出流,这个输入/输出是相对于谁来说。
答 :相对于当前代码来说。
问题二:管道输入流/输出流 怎么连接起来。
答 :创建对象的时候用构造器传值就可以了。
package com.briup.ch20;
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
//管道输入 输出流 多线程使用
public class Test2 {
public static void main(String[] args) throws Exception {
//管道输入
PipedInputStream pis =
new PipedInputStream();
// 管道输出
PipedOutputStream pos =
new PipedOutputStream();
//管道链接
pis.connect(pos);
//构建线程
Read r = new Read(pis);
Write w = new Write(pos);
r.start();
w.start();
}
}
//从管道中拿数据
class Read extends Thread{
//管道输入流
PipedInputStream pis;
@Override
public void run() {
while(true) {
try {
//从管道中死循环读数据
System.out.println(pis.read());
} catch (IOException e) {
e.printStackTrace();
}
}
}
public Read(PipedInputStream pis) {
this.pis = pis;
}
}
class Write extends Thread{
//管道输出流
PipedOutputStream pos;
public Write(PipedOutputStream pos) {
this.pos = pos;
}
@Override
public void run() {
System.out.println("管道输出流");
try {
//从控制台读取数据的类
InputStream in = System.in;
while(true) {
//从控制台读取一个数据
int read = in.read();
//写到管道中
pos.write(read);
pos.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.5: 字节包装流 : BufferedInputStream/BufferedOutputStream 有缓冲区的包装流
特点:有缓冲区的包装流 效率 会高一些,可以使用mark和reset功能(标记 回读 功能)
提高效率的原因:BufferedInputStream对外提供滑动读取的功能实现,通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedInputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。这样的设计的好处是:避免了大量的磁盘IO,因为原始的InputStream类实现的read是即时读取的,即每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),可想而知,如果数据量巨大,这样的磁盘消耗非常可怕。而通过缓冲区的实现,读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘IO,载入一段数据填充缓冲,那么下一次读取一般情况下就直接可以从缓冲区读取,减少了磁盘IO。
3.5.1:构造器 new BufferedInputStream(字节流,缓冲区大小);//默认缓冲大小是8192字节
3.5.2:构造器 new BufferedOutputStream(字节流,缓冲区大小)//默认缓冲大小是512字节
package com.briup.ch20;
import java.io.BufferedInputStream;
import java.