簡體   English   中英

如何通過BufferedOutputStream寫文件?

[英]How to write in file by BufferedOutputStream?

我想將數據從demo1.txt復制到demo2.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();
    }
}

更改

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。

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();
     }
}

這將完成工作:)。 只需指定您要查看的字節大小,然后使用循環繼續讀取文件即可。

正如其他人正確建議的那樣,您實際上需要自己的緩沖區來按部分讀取和寫入,該緩沖區表示為指定大小的字節數組。 因此,現在用BufferedInputStream和BufferedOutputStream包裝FileInputStream和FileOutputStream是沒有意義的-如果您從流中輸入並按較小的部分輸出,它們將非常有用。 我建議僅使緩沖區大於建議的大小(例如16384或32768),並在這種情況下刪除不必要的BufferedInputStream和BufferedOutputStream。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM