博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java io FileInputStream
阅读量:6870 次
发布时间:2019-06-26

本文共 1242 字,大约阅读时间需要 4 分钟。

  hot3.png

1. FileInputStream类结构, 继承自InputStream

2. FileInputStream的方法

构造方法:

 
public FileInputStream(String name) throws FileNotFoundException { this (name != null ? new File(name) : null ); }

通过字符串初始化的FileInputStream最终是通过该字符串创建文件的方式初始化FileInputStream

 
public FileInputStream(File file) throws FileNotFoundException { String name = (file != null ? file.getPath() : null ); SecurityManager security = System.getSecurityManager(); if (security != null ) { security.checkRead(name); } if (name == null ) { throw new NullPointerException(); } fd = new FileDescriptor(); fd.incrementAndGetUseCount(); open(name); }

通过源代码我们可以看到该类用nio优化过的, 而且使用了jdk5的并发库

read()方法:

 
public native int read() throws IOException; private native int readBytes( byte b[], int off, int len) throws IOException;

可以看到read方法都是调用native方法, 这里就没有办法看到源代码了。和InputStream一样, 如果没有

输入可用,会一直阻塞等待

close()方法:

 
public void close() throws IOException { synchronized (closeLock) { if (closed) { return ; } closed = true ; } if (channel != null ) { fd.decrementAndGetUseCount(); channel.close(); } int useCount = fd.decrementAndGetUseCount(); if ((useCount <= 0 ) || ! isRunningFinalize()) { close0(); } }

关闭方法会对内部的一个对象上锁,修改是否关闭标志位,调用一系列并发方法,最终会调用一个本地的close0()方法

转载于:https://my.oschina.net/niuge/blog/72037

你可能感兴趣的文章
如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器
查看>>
《Android 应用测试指南》——第1章,第1.4节测试的种类
查看>>
对jquery val 获取input 文本框值进行扩展
查看>>
MySQL (select_paren) union_order_or_limit 行为
查看>>
并发不是并行,它更好!
查看>>
nltk 自己训练模型例子
查看>>
间谍卫星的基础?YOLT——利用卷积神经网络对卫星影像进行多尺度目标检测(Part I)...
查看>>
jstl_开发第一个标签
查看>>
程序员哇,你想在下个情人节或者520脱单么?这个秘籍不能错过
查看>>
去不去O,谁说了算?
查看>>
PHP防SQL注入和XSS攻击
查看>>
在SHAREPOINT共享文档库中启用版本控制功能。
查看>>
Http 代理工具 实战 支持网页与QQ代理
查看>>
又见尾递归
查看>>
安装PyGraphics
查看>>
【COCOS2DX-LUA 脚本开发之四】使用TOLUA++编译PKG,从而创建自定义类让LUA脚本使用...
查看>>
开源大数据周刊-第16期
查看>>
遥感图像分类现状及存在的问题
查看>>
Commons Logging存在的ClassLoader问题详解
查看>>
双向链表的操作
查看>>