• [转]探究java IO之FileInputStream类


    使用FileInputStream类创建的InputStream对象可以用于从文件读取内容。两个常用的构造函数如下所示:

    1
    2
    FileInputStream(String filePath)
    FileInputStream(File fileObj)

    这两个构造函数都会抛出FileNotFoundException异常。其中,filePath是文件的完整路径名,fileObj是描述文件的File对象。

    下面的例子创建了两个FileInputStream对象,它们使用相同的磁盘文件,并且分别是使用这两个构造函数创建的:

    1
    2
    3
    FileInputStream f0 = new FileInputStream("/autoexec.bat");
    File f = new File("/autoexec.bat");
    FileInputStream f1 = new FileInputStream(f);

    尽管第一个构造函数可能更常用,但是使用第二个构造函数,在将文件附加到输入流之前,可以使用File类的方法对文件进行进一步检查。当创建FileInputStream对象时,还可以为读取而打开流。FileInputStream类重写了InputStream抽象类中的6个方法,但没有重写mark()和reset()方法。当在FileInputStream对象上试图调用reset()方法,会抛出IOException异常。

    如例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package io;
     
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
     
    public class FileInputStreamDemo1 {
        public static void main(String[] args) {
            try(InputStream in = new FileInputStream(
                    "/home/fuhd/work/workspace/java/decompile/src/com/fhd/DownloadApkUtil.java");
                    OutputStream out = new BufferedOutputStream(System.out)){
                int num = in.available();
                System.out.println("文件总大小为:" + num + "字节");
                int k;
                byte[] buffer = new byte[1024];
                while((k = in.read(buffer)) != -1){
                    /*
                     * 这里最好定义成从0下标读取,读取K个字节,以免造成重复读取以前的数据。
                     * 比如,最后一次读取字节没有装载满buffer时,没被装载的空间可能还是上一次
                     * 的数据。例如:上次读取到buffer的为:[1,2,3,4,5,6],而这一次最后读取了7,8,9
                     * 这三个数,那现在buffer中为:[7,8,9,4,5,6],如果直接用out.write(buffer)读会
                     * 读出多余的数据,所以使用out.write(buffer,0,k)就不会重复读取。
                     */
                    out.write(buffer,0,k);
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    内存映射文件原理探索(转载)
    虚拟内存原理
    CSAPP-链接
    CSAPP-程序优化
    CSAPP-过程调用,数据存储,缓冲区溢出
    【数学,方差运用,暴力求解】hdu-5037 Galaxy (2014鞍山现场)
    【贪心+一点小思路】Zoj
    【几何模板加点小思路】hdu-4998 Rotate
    【背包问题】【出来混总是要还的...】总结+入门练手题
    【优先队列】【最近连STL都写不出来了/(ㄒoㄒ)/~~】hdu_5360/多校#6_1008
  • 原文地址:https://www.cnblogs.com/xunbu7/p/5023767.html
Copyright © 2020-2023  润新知