package byte_base;

import java.io.FileInputStream;
import java.io.IOException;

public class FileViewer {

    public static void main(String[] args) {
        int a;
        try{
            FileInputStream fis = new FileInputStream("FileViewerln.txt");

            while((a = fis.read())!=-1){
                System.out.write(a);

            }
        }catch(IOException ioe){
            System.err.println(ioe);
            ioe.printStackTrace();
        }

    }
}


它是程序,从文件中打印文本。
当我使用FileInputStream类和System.out.write()方法时,它运行得很好。

但是我尝试了另一种方式。
我使用了BufferedOutputStream而不是System.out.write()方法。

底部是使用BufferedOutputStream类的代码。

package byte_base;

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class CopyOfFileViewer {

    public static void main(String[] args) {
        int a;
        try{
            FileInputStream fis = new FileInputStream("FileViewerln.txt");
            BufferedOutputStream bos = new BufferedOutputStream(System.out);

            while((a = fis.read())!=-1){
                bos.write(a);
            }
        }catch(IOException ioe){
            System.err.println(ioe);
            ioe.printStackTrace();
        }

    }
}


但是这段代码的结果是真空。

我认为第一代码和第二代码非常相似。

为什么它(第二代码)不能正常工作?

最佳答案

您忘记关闭OutputStream bos

bos.close();


实际上,在“尝试资源”中进行操作会更好

    try (FileInputStream fis = new FileInputStream("FileViewerln.txt");
        BufferedOutputStream bos = new BufferedOutputStream(System.out);
    ) {
        while((a = fis.read())!=-1){
            bos.write(a);
        }
    } catch(IOException ioe){
        System.err.println(ioe);
        ioe.printStackTrace();
    }


InputStream实现Closeable。因此,其子类可以在try-with-resources中使用。

关于java - java BufferedOutputStream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44289660/

10-12 00:27