zoukankan      html  css  js  c++  java
  • java-IO小记

    说来惭愧,工作一年多了,对io仍然不是很了解。不仅是io,还有网络,还有多线程。shame!!!

    接下来的日子里,先搞多线程,再搞io,再搞网络,半年内一定要完成!

    好了,今天终于搞懂了outputStream 的三个write的区别,这里小记一下

    1.文档里的说明

    write(byte[] b) 
              Writes b.length bytes from the specified byte array to this file output stream.

    write(byte[] b, int off, int len) 
              Writes len bytes from the specified byte array starting at offset off to this file output stream.

    write(int b) 
              Writes the specified byte to this file output stream.

    2.理解

    ① write(byte[] b) 是每次写b.length个字节,即使最后一个byte数组里面没读满,也会写b.lenth个字节

    eg:

    FileInputStream in = new FileInputStream(new File("C:/Users/admin/Desktop/js/node.txt"));
            byte b[] = new byte[50];
            FileOutputStream out = new FileOutputStream(new File("C:/Users/admin/Desktop/js/node1.txt"));
            int len = 0;
            System.out.println("总长度"+in.available());
            while(( len = in.read(b))!=-1){
                System.out.println(len);
                out.write(b);
            }
            in.close();
            out.flush();
            out.close();

    原文件内容

    写出的文件

    控制台输出

    可以看出,由于最后一次读取的字节其实只有4个,但是输出的文件却多了很多(46个字节应该),好像是把上一次读取的内容写入了

    所以,即使最后一个byte数组里面没读满,也会写b.lenth个字节

    ② write(byte[] b, int off, int len) 

    off一半是0

    len 就是这次该写多少个字节

    把上面的代码改为

    FileInputStream in = new FileInputStream(new File("C:/Users/admin/Desktop/js/node.txt"));
            byte b[] = new byte[50];
            FileOutputStream out = new FileOutputStream(new File("C:/Users/admin/Desktop/js/node1.txt"));
            int len = 0;
            System.out.println("总长度"+in.available());
            while(( len = in.read(b))!=-1){
                System.out.println(len);
                out.write(b,0,len);
            }
            in.close();
            out.flush();
            out.close();

    区别在于out.write 方法

    这样的话,写出的文件就没有问题了,最后一次读取4个字节,就写4个字节。

    ③ write(int b)

    Writes the specified byte to this output stream. The general contract for write is that one byte is written to the output stream. The byte to be written is the eight low-order bits of the argument b. The 24 high-order bits of b are ignored.

    不懂。。。

  • 相关阅读:
    C语言第四次博客作业嵌套循环
    C语言第六次博客作业数据类型
    C语言第五次博客作业函数
    C语言第二次博客作业分支结构
    MD5 DSA RSA 简单 区别
    关于Linux Grep命令使用的详细介绍
    最好、最智能化、最方便的Java开发软件 IntelliJ IDEA 10.5.2
    Linux Find 命令精通指南
    linux 下面递归查找
    公钥和私钥的解释
  • 原文地址:https://www.cnblogs.com/Iqiaoxun/p/5745690.html
Copyright © 2011-2022 走看看