1

我想将数据从 复制demo1.txtdemo2.txt,虽然我可以做到,但BufferedReader我想复制BufferedInputStream/ BufferedOutputStream。请告诉我如何做到这一点。

import java.io.*;
class stream4
{
    public static void main(String arr[])
    {
        BufferedInputStream bfis=new BufferedInputStream(new FileInputStream("demo1.txt"));
        BufferedOutputSteam bfos=new BufferedOutputStream(new FileOutputStream("demo2.txt"));
        byte b[]=(bfis.read());
        bfos.write(b);
        bfis.close();
        bfos.close();
    }
}
4

3 回答 3

3

改变

byte b[]=(bfis.read());

    byte[] b = new byte[1024];
    try {
        for (int readNum; (readNum = bfis.read(b)) != -1;) {
            bfos.write(b, 0, readNum);
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    finally {
        bfis.close();
        bfos.close();
    }

作为bfis.read()数据的下一个字节,如果到达流的末尾,则为 -1。

于 2014-08-12T17:52:42.493 回答
3
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Main
{
    public static void main(String[] args) throws Exception
    {
       String fromFileName = "demo1.txt";
       String toFileName = "demo2.txt";
       BufferedInputStream in = new BufferedInputStream(new FileInputStream(fromFileName));
       BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(toFileName));
       byte[] buff = new byte[32 * 1024]; 
       int len = 0;
       while ((len = in.read(buff)) > 0) //If necessary readLine()
         out.write(buff, 0, len);
       in.close();
       out.close();
     }
}

这将完成工作:)。只需指定您正在查看的字节大小,然后从那里使用循环继续读取文件。

于 2014-08-12T17:53:06.073 回答
0

正如其他人正确建议的那样,您实际上需要自己的缓冲区来按部分读取和写入,这表示为指定大小的字节数组。因此,现在用 BufferedInputStream 和 BufferedOutputStream 包装 FileInputStream 和 FileOutputStream 没有任何意义 - 如果您从流输入并按较小部分输出,它们很有用。我建议只是让你的缓冲区比建议的大(比如 16384 或 32768),并在这种情况下删除不必要的 BufferedInputStream 和 BufferedOutputStream 。

于 2018-10-12T13:18:34.990 回答