Code dùng bộ đệm khi in ra file bị sai

Cho em hỏi xíu về Buffered trong java ạ. Em có một đoạn code copy 2 file thôi. mà khi em sử dụng bộ đệm thì kết quả bị sai. còn khi không dùng đệm thì kết quả đúng… có ai giúp em với cám ơn ạ

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Hahaha {
    public static void main(String[] args) {
        String nguon = "E://FileTest/haha.txt";
        String dich = "E://FileTest/bufferedWord.txt";
        File f = new File(nguon);
         File f2 = new File(dich);
        try {
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f2));
            
            int ch;
            while((ch=in.read())!=-1){
                System.out.print((char)ch);
                out.write(ch);
            }
        } catch (Exception e) {
        }
    }
     
 
}

Có flush đâu mà ghi ra file. 1 là bạn flush từng dòng, 2 là close BufferedOutputStream sau khi write tất cả vào buffer hàm close sẽ flush trước khi close file.

2 Likes

Bạn chỉ rõ cho mình được không? Thật sự là mình chỉ mới tìm hiểu và kiến thức mình còn rất hạn chế

Bộ đệm (Buffered), nó sẽ giữ dữ liệu trên mem cho đến khi được flush hoặc dữ liệu vượt ngưỡng của nó, nó sẽ đẩy dữ liệu ra output và quay lại chu trình
Không có bộ đệm thì sẽ đẩy trực tiếp mà không thông qua việc giữ lại trên mem.

Nếu dữ liệu không được sử dụng trên mem mà phải đẩy trực tiếp ra output thì không cần thiết phải sử dụng các Buffered class

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?