zoukankan      html  css  js  c++  java
  • 关于OutputStream的write方法FAQ(from bbs.csdn.net)

    问:

    Java code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FileInputStream fis = new FileInputStream(new File("C:\文件1.txt"));
    FileOutputStream fos = new FileOutputStream(new File("C:\文件2.txt"));
     
    int i=0;
    byte[] buffer = new byte[2];
    while ((i = fis.read(buffer)) > 0) {
        fos.write(buffer, 0, i);
    }
     
    fis.close();
    fos.close();


    “文件1.txt”有1M, 这里我故意将buffer = new byte[2]。
    fos.write(buffer, 0, i) 是不是就是说每次将byte[2]的内容写入到“文件2.txt”中?
    还请问一下fos.write(buffer, 0, i)中第2个参数0,是什么意思?第2个参数可以是0吗?如果第2个参数总是为0,是不是就会把前面写入的内容覆盖了呢?
    api上说的偏移量到底指的什么意思?

    write(byte[])和write(byte[],off,len)到底有何区别,那个好一点呢?



    答:


    第2个参数0代表的是从buffer[0]开始取数据,取到buffer[i-1],因为java得区间基本上都是左闭又开的原则
    如果第2个参数总是为0,实际你就每次只往文件中写人buffer[0]这个数据
    偏移代表的就是每次写入文件的字节数
    write(byte[])和write(byte[],off,len)到底有何区别,那个好一点呢?
    区别就是write(byte[])每次都把byte数组中的数据写入了文件,write(byte[],off,len)可以定义写入的字节 数,如果按照你程序的写法,也就是每次写入的是读入的字节数
    写程序的时候要用write(byte[],off,len)
    举个例子文件1存有15字节的数据
    FileInputStream fis = new FileInputStream(new File("C:\文件1.txt"));
    FileOutputStream fos = new FileOutputStream(new File("C:\文件2.txt"));

    int i=0;
    byte[] buffer = new byte[10];
    while ((i = fis.read(buffer)) > 0) {
        fos.write(buffer );
    }

    fis.close();
    fos.close();
    循环到第二次的时候,实际读入的是5个字节的数据,但是往文件而写的时候,却写入了10个字节的数据
    这样就会出问题
    顺便说下,如果读的是中文数据的话,用这种读写方式很如意出现乱码的。。。

  • 相关阅读:
    20162307 实验二实验报告
    20162307 第六周学习总结
    20162307 第5周学习总结
    20162306 2016-2017-2《程序设计与数据结构》第八周学习总结
    20162306 2016-2017-2《程序设计与数据结构》第七周学习总结
    第二次实验报告
    20162306 2016-2017-2《程序设计与数据结构》第六周学习总结
    20162306 2016-2017-2《程序设计与数据结构》第五周学习总结
    第一次实验报告
    20162306陈是奇 2016-2017-2《程序设计与数据结构》第四周学习总结
  • 原文地址:https://www.cnblogs.com/jinhengyu/p/10258079.html
Copyright © 2011-2022 走看看