• JavaIO学习:字节流


    JavaIO流之字节流

    字节流

    抽象基类:InputStream,OutputStream。

    • 字节流可以操作任何数据。

    注意:

    • 字符流使用的数组是字符数组,char[] chs ;
    • 字节流使用的数组是字节数组,byte[] bt ;
    FileOutputStream fos=new FileOutputStream(“a.txt”);
    
    fos.write("abcde"); //直接将数据写入到了目的地。
    
    fos.close();//只关闭资源。
    
    FileInputSteam fls=new FileInputStream("a.txt");
    
    //fis.available();//获取关联的文件字节数。如果文件体积不大,可以这样操作。
    
    byte[]buf=new byte[fis.available()];//创建一个刚刚好的缓冲区。//但是这有一个弊端,就是文件过大,大小超出Jvm的内容空间时,会内存溢出。
    
    fis.read(buf);
    
    System.out.println(new String(buf));
    
     

    例子:

    需求:copy一个图片。

    BufferedInputStream bufis=new BufferedInputStream(new FileInputStream("1.jpg"));
    
    BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("2.jpg"));
    
    int by=0;
    
    while(by=bufis.read()!=-1){
    
      bufos.write(by);
    
      bufos.newLine();
    
    }
    
    bufis.close();
    
    bufos.close(); 

    小结:

    目前学习的流对象:

    • 字符流: FileReader FileWriter BuffereedReader BufferedWriter
    • 字节流:FileInputStream FileOutputStream BufferedInputStream BufferedOutputStream

    补充:

    1.字节流的read()方法读取的是一个字节。为什么返回的不是byte类型,而是int类型呢?

    • 因为read方法读到末尾时返回的是-1,而在所操作的数据中很容易出现连续多个1的情况,而连续读到8个1,就是-1,导致读取会提前停止。所以将读到的一个字节提升为一个int类型的数值,但是只保留原字节,并在剩余二进制位补0。

    具体操作是:byte&255 or byte&0xff

    • 对于write方法,可以一次写入一个字节,但接收的是一个int类型数值。只写入该int类型的数值的最低一个字节(8位)。
    • 简单说:read方法对读到的数据进行提升,write对操作的数据进行转换。
  • 相关阅读:
    第二季-专题11-世界一下变大了-MMU
    第二季-专题10-C语言环境初始化
    第二季-专题9--代码搬移不可少
    第二季-专题8-不用内存怎么行
    第二季-专题6-点亮指路灯
    第二季-专题7-ARM跑快了---时钟初始化
    第二季-专题5-核心初始化
    第二季-专题4-我是bootloader设计师
    消除苹果系统对边框的优化
    css3
  • 原文地址:https://www.cnblogs.com/cainiao-chuanqi/p/11328140.html
Copyright © 2020-2023  润新知