JavaIO(二)-BIO详解

啥也不说先上代码,这是一个很简单的从本地文件中读取数据的程序

public class FileBioTest {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = null;
        try {
            //2号参数可以指定缓冲区大小 默认8192
            reader = new BufferedReader(new FileReader("E:\\test.txt"));
            StringBuilder content = new StringBuilder();
            reader.lines().forEach(content::append);
            System.out.println(content);
        } finally {
            if (Objects.nonNull(reader)) {
                reader.close();
            }
        }
    }
}

文件内容:

你要悄悄的优秀,
然后惊艳所有人。

控制台输出:

 

这是一个很简单的文件内容读取程序,但是它可能代表不了BIO,他只能代表IO。因为文件读取总是阻塞的,现代操作系统都有复杂的缓存和预取机制,使得本地磁盘 I/O 操作延迟很少,这样就使得非阻塞 这一操作意义不大。所以BIO,NIO概念更多的针对的都是网络数据传输。

BIO被叫做同步阻塞IO,阻塞强调等待,同步强调顺序,阻塞强调资源获取方式,同步强调处理资源的业务逻辑。

堵塞:当资源不可用时,IO会一直等待,直到超时或者反馈

非堵塞:当资源不可用时,IO请求会直接返回,并标识资源不可用,但是不妨碍我下一次接着请求。

同步:当前IO操作执行完才会执行下一个操作。

异步:当前IO操作执行的同时,处理别的操作。当操作完成,告知用户即可。

那么阻塞占用CPU资源吗?其实不占用或者占用很少,这里的阻塞是强调IO阻塞,不是线程阻塞,在IO设备与CPU交互的方式中有一种名为中断的交互方式。IO阻塞,线程挂起不再执行,等待中断信号,唤醒然后继续执行。这就跟我们前边说的 阻塞强调等待,强调资源获取方式对应起来了。

之前我们说只有网络IO才有阻塞和非阻塞的区别,那我们开始写一个程序来体验一下阻塞。

public class BioBaseServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(9090);
            System.out.println("create socket, listen 9090");
            Socket client = serverSocket.accept();
            System.out.println
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值