01/10/2018, 15:54

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) {
        }
    }
     
 
}
Demon Hunter viết 18:06 ngày 01/10/2018

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.

Sống về đêm viết 18:06 ngày 01/10/2018

BufferedOutputStream

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ế

anon52681320 viết 18:04 ngày 01/10/2018

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

Bài liên quan
0