查漏-javaIO


  • [外链图片转存失败(img-CYWK5Fw9-1563958434835)(查漏-javaIO_files/1.jpg)]
    输入流 InputStream类字节输入流 Unicode 双字节
    public abstract class InputStream implements Closeable
    [外链图片转存失败(img-im0VHuSw-1563958434842)(查漏-javaIO_files/2.jpg)]
    [外链图片转存失败(img-4KEAUopA-1563958434848)(查漏-javaIO_files/3.jpg)]
    输入流 Reader类 字符输出流
    public abstract class Reader implements Readable, Closeable {
    [外链图片转存失败(img-32TgqVGg-1563958434849)(查漏-javaIO_files/4.jpg)]
    [外链图片转存失败(img-3UNT8hpF-1563958434850)(查漏-javaIO_files/5.jpg)]
    输出流 OutputStream类字节输出流 Unicode 双字节
    public abstract class OutputStream implements Closeable, Flushable {
    [外链图片转存失败(img-pdoSsCg0-1563958434852)(查漏-javaIO_files/6.jpg)]
    [外链图片转存失败(img-RqNofP6p-1563958434853)(查漏-javaIO_files/7.jpg)]
    输出流 Writer 字符输出流
    [外链图片转存失败(img-TRovgiaJ-1563958434855)(查漏-javaIO_files/9.jpg)]
    [外链图片转存失败(img-CFARdxtB-1563958434856)(查漏-javaIO_files/8.jpg)]
  • File
  1. public File(File parent, String child)
    public File(File parent, String child) {
    if (child == null) {
    throw new NullPointerException();
    }
    if (parent != null) {
    if (parent.path.equals("")) {
    this.path = fs.resolve(fs.getDefaultParent(),
    fs.normalize(child));
    } else {
    this.path = fs.resolve(parent.path,
    fs.normalize(child));
    }
    } else {
    this.path = fs.normalize(child);
    }
    this.prefixLength = fs.prefixLength(this.path);
    }

  2. public File(String pathname)
    public File(String pathname) {
    if (pathname == null) {
    throw new NullPointerException();
    }
    this.path = fs.normalize(pathname);
    this.prefixLength = fs.prefixLength(this.path);
    }

  3. public File(String parent, String child)
    public File(String parent, String child) {
    if (child == null) {
    throw new NullPointerException();
    }
    if (parent != null) {
    if (parent.equals("")) {
    this.path = fs.resolve(fs.getDefaultParent(),
    fs.normalize(child));
    } else {
    this.path = fs.resolve(fs.normalize(parent),
    fs.normalize(child));
    }
    } else {
    this.path = fs.normalize(child);
    }
    this.prefixLength = fs.prefixLength(this.path);
    }

  4. public File(URI uri)
    public File(URI uri) {

    // Check our many preconditions
    if (!uri.isAbsolute())
    throw new IllegalArgumentException(“URI is not absolute”);
    if (uri.isOpaque())
    throw new IllegalArgumentException(“URI is not hierarchical”);
    String scheme = uri.getScheme();
    if ((scheme == null) || !scheme.equalsIgnoreCase(“file”))
    throw new IllegalArgumentException(“URI scheme is not “file””);
    if (uri.getAuthority() != null)
    throw new IllegalArgumentException(“URI has an authority component”);
    if (uri.getFragment() != null)
    throw new IllegalArgumentException(“URI has a fragment component”);
    if (uri.getQuery() != null)
    throw new IllegalArgumentException(“URI has a query component”);
    String p = uri.getPath();
    if (p.equals(""))
    throw new IllegalArgumentException(“URI path component is empty”);

    // Okay, now initialize
    p = fs.fromURIPath§;
    if (File.separatorChar != ‘/’)
    p = p.replace(’/’, File.separatorChar);
    this.path = fs.normalize§;
    this.prefixLength = fs.prefixLength(this.path);
    }
    [外链图片转存失败(img-i8IWiRsL-1563958434858)(查漏-javaIO_files/10.jpg)]
    [外链图片转存失败(img-MIbzepBH-1563958434860)(查漏-javaIO_files/11.jpg)]
    =======输入输出是以程序为主语说的=
    1.程序输出到文件
    2.文件输入到程序
    3.字节读取可能产生乱码 ===中文
    4.字符读取避免乱码 ===中文
    缓存是IO的一种性能优化 增加了IO流的内存缓存区 使skip()、mark()、reset()成为可能
    ***读取文件过程
    [外链图片转存失败(img-GiZkaRQp-1563958434862)(查漏-javaIO_files/12.jpg)]

网络IO(tomcat)

/*
1.阻塞:在调用结果返回前,当前线程会被挂起,并在得到结果后返回
2.非阻塞:如不能立刻得到结果,该调用不会阻塞当前线程。因此对于非阻塞情况,调用者需要定时轮询查看结果
3.同步:通信机制 调用者等待返回结果
4.非同步:通信机制 被调用者通过回调等形式通知调用者
*/
BIO ===》阻塞式IO
NIO ===》
NIO2 ===》支持AIO(异步IO)
ARP ===》 Apache可移植运行库

  • BIO
    在网络通信中(TCP/IP),需要通过Socket在客户端和服务端建立双向链接以实现通信
    tomcat 异步处理
    JDK1.4之后BIO的API已经以NIO为基础重新实现,因此即使采用流的方式进行读写,性能较之旧版也有很大的提升
  • NIO
    高速、面向块的I/O。 不编写本地代码的情况下利用底层优化,这是BIO所无法做到的。
    与BIO相比,NIO有几个新概念
    1.通道
    通道(Channel)是对BIO的模拟,到任何目的地(或来自。。。)的所有地方的所有数据都必须通过一个通道对象。
    通道与流的不同之处在于通道是双向的。流只是在一个方向上移动(要么读,要么写)。通道双向(用于读写或同时用于读写)。因为通道是双向的,所以它可以比流更好地反映底层操作系统的真实情况
    2.缓存区
    尽管通道用于读写数据,但是我们却并不直接操作通道进行读写。而是通过缓冲区(Buffer)完成。缓冲区实质上是一个容器对象。发送给通道的所有对象都必须先放到缓冲区中,同样从通道中读取的任何数据都要先读到缓冲区中。
    缓冲区体现了NIO与BIO的一个重要区别。在BIO中,读写可以直接操作流对象。 ===
    缓冲区通常是一个字节数组,也可以使用其他类型的数组。但是缓冲区又不仅仅是一个数组,它提供了对数据的结构访问,而且还可以跟踪系统的读写进程。
    3.选择器
    Java NIO提供了选择器组件(Selector)用于同时检测多个通道的事件以实现异步I/O。我们将感兴趣的事件注册到Selector上,当事件发生时可以通过Selector获得事件发生的通道,并进行相关操作。
    异步I/O的一个优势在于,它允许你同时根据大量的输入、输出执行I/O操作。同步I/O一般要借助于轮询,或者创建许许多多的线程以处理大量的链接。使用异步I/O,你可以监听任意数量的通道事件,不必轮询,也不必启动额外的线程。
  • NIO2 对异步IO的支持(AIO)
    1.通道 JDK7提高三个通道实现类用于网络IO。
    2.缓冲区同上
    3.Future与CompletionHandler
  • ARP
    的链接。使用异步I/O,你可以监听任意数量的通道事件,不必轮询,也不必启动额外的线程。
  • NIO2 对异步IO的支持(AIO)
    1.通道 JDK7提高三个通道实现类用于网络IO。
    2.缓冲区同上
    3.Future与CompletionHandler
  • ARP
    主要功能模块:内存分配及内存池、原子操作、文件I/O、锁、内存映射、哈希表、网络I/O、轮询、进程及线程操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值