core java--day20(PipedInputStream,PrintStream(out.println),字符流 :BufferedReader/PrintWrite,转换流)

复习:
    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.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值