文件,应该是开发中较常见的数据源了,故操作文件的字节输入/输出流FileInputStream和FileOutputStream 是 Java IO 字节流中重要的实现类之一。
在说FileInputStream和FileOutputStream之前不得不提一下File类。
File也是java.io 包中的一个类,主要用于描述文件及文件目录路径,具体这里不展开,在FileInputStream和FileOutputStream中主要就是在构造FileInputStream和FileOutputStream时,告知其数据源。
FileInputStream有两个较常见的构造函数:
public FileInputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null);
}
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;
}
if(file.isInvalid()) {
throw new FileNotFoundException("Invalid file path");
}
fd = new FileDescriptor();
fd.incrementAndGetUseCount();
this.path = name;
open(name);
}
从上述两个构造函数大致可以看出,前面一些都是控制和属性赋值相关的语句,核心的就是最后一句open(String name)方法
而且也引出了另一个构造函数:
public FileInputStream(FileDescriptor fdObj) {
SecurityManager security = System.getSecurityManager();
if(fdObj == null) {
throw new NullPointException();
}
if(security != null) {
security.checkRead(fdObj);
}
fd = fdObj;
path = null;
fd.incrementAndGetUseCount();
}
但是open(String name) 其实是一个native方法,由JVM自身实现:
private native void open(String name) throws FileNotFouondException;
最重要的三个方法即InputStream三个read()方法的重写: