Java教程

Java IO

本文主要是介绍Java IO,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、Java IO流的40多个类都是从如下4个抽象类派生出来的。

InputStream/Reader:所有的输入流基类,前者是字节输入流,后者是字符输入流。

OutputStream/Reader:前者是字节输出流,或者字符输出流。

解释:流是程序输入或输出的一个连续的字节序列,设备(例如鼠标,键盘,磁盘,屏幕和打印机)的输入和输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现,不一定是物理磁盘文件,还可以是对应与某个输入/输出源的逻辑文件

 

为什么I/O流操作要分为字节流操作和字符流操作?

个人原因:

1、字符流是由Java虚拟机将字节流转换得到的,计算过程比较耗时。

2、如果不知道编码类型会出现乱码。

音频文件、图片媒体等文件用字节流比较好。

如果涉及到字符,还是字符流比较好。

 

 

BIO属于同步阻塞I/O,Blocking I/O

同步阻塞IO模型中,应用程序发起Read调用后,会一直阻塞,直到把内核数据拷贝到用户空间。

在客户端连接数量不高的情况下是没问题的。但是面对十万甚至百万级连接的时候,传统BIO模型是无能为力的。

 

NIO(Non-blocking)

Java中的NIO可以看做I/O多路复用。

同步非阻塞IO模型中,应用程序一直发起read调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到内核把数据拷贝到用户空间。

一直轮询来查看当前数据是否准备好。

NIO重点是把Channel,Buffer,Selector选择器三个类。

其中Selector帮助线程来管理多个Channel。

传统的IO操作基于数据流进行操作,而NIO基于Channel和buffer进行读写。

NIO与传统的IO的区别:

  1、IO面向流、NIO面向缓冲区。因为缓冲区的存在,可以在缓冲区进行数据的前后移动,比如拆包和封包。

  2、channel和stream的区别,channel是双向读写,stream是单向读写。

 

 

 

AIO、NIO、BIO

AIO:适用于连接数目多且连接比较长的架构,比如相册服务器,充分调用OS参与并发操作,编程复杂。用的较少。

NIO:适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限于应用中。

BIO:适用于连接数目少且连接比较小的架构,这种方式多服务器资源要求较高。

 

这篇关于Java IO的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!