欢迎来到天天文库
浏览记录
ID:30775810
大小:168.00 KB
页数:18页
时间:2019-01-03
《javaio之fileinputstream和fileoutputstream源码分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、引子文件,作为常见的数据源。关于操作文件的字节流就是—FilelnputStream&FileOutputStream。它们是Basic10字节流屮重要的实现类。二、FilelnputStream源码分析FilelnputStream源码如卜:/***FilelnputStream从文件系统的文件中获取输入字节流。文件取决于主机系统。*比如读取图片等的原始字节流。如果读取字符流,考虑使用FiLeReader.*/publieclassSFilelnputStreamextendsInputstream{/*
2、文件描述符类-一此处用于打开文件的句柄*/privatefinalFileDescriptorfd;/*引用文件的路径*/privatefinalStringpath;/*文件通道,NIO部分*/privateFilechannelchannel=null;privatefinalObjectcloseLock=newObject();privatevolatilebooleanclosed=false;privatestaticfinalThreadLocalrunningFinalize=
3、newThreadLocalo();privatestaticbooleanisRunningFinalize(){Booleanval;if((val=runningFinalize.get())!=null)returnval・booleanValue();returnfalse;}/*通过文件路径名來创建FileInputStream*/publicFileinputstream(Stringname)throwsFi1eNotFoundException{this(name!=null?newFile(
4、name):null);}/*通过文件來创建Fileinputstream*/publicFilelnputStream(Filefile)throwsFileNotFoundException(Stringname=(file!=null?file・getPath():null);SecurityManagersecurity=System.getSecurityManager();if(security!=null){security・checkRead(name);}if(name==null){thro
5、wnewNullPointerException();}if(file.isInvalidO){thrownewFileNotFoundException(HInvalidfilepath");}fd=newFileDescriptor{);fd・incrementAndGetLUseCount();this.path=name;open(name);}/*通过文件描述符类来创建Fileinputstream*/publicFileinputstream(FileDescriptorfdObj){Securit
6、yManagersecurity=System.getSecurityManager();if(fdObj==null){thrownewNullPointerException();}if(security!=null){security.checkRead(fdObj);}fd=fdObj;path=null;fd・incrementAndGetLUseCount();}/*打开文件,为了下一步读取文件内容。native方法*/privatenativevoidopen(Stringname)throwsF
7、ileNotFoundException;/*从此输入流中读取一个数据字节*/publicintread()throwsIOException{ObjecttraceContext=IoTrace・fileReadBegin(path);intb=0;try{b=readO();}finally{IoTrace.fileReadEndCtraceContLext,b==-1?0:1);}returnb;}/*从此输入流中读取一个数据字节。native方法*/privatenativeintreadO()thro
8、wsIOException;/*从此输入流中读取多个字节到byte数组中。native方法*/privatenativeintreadBytes(byteb[],intoffzintlen)throwsIOExceptio/*从此输入流中读取多个字节到byte数组中。*/publicintread(byteb[])throwsIOException{ObjecttraceContext
此文档下载收益归作者所有