cho mình hỏi , cách hoạt động của method này là như thế nào trong trường hợp chạy đa luồng vậy , mình có đọc trên mạng thấy nói khi 1 stream gọi đến method này nó sẽ ghi các data có trong buffer vào stream đích rồi xóa các data có trong buffer , vậy nếu ta chạy 2 luồng , luồng 1 đang write chưa xong , thì luồng 2 chạy lệnh flush vậy thì có bị lỗi không data trong luồng 1 có được đưa đến stream đích đầy đủ không
Cách hoạt động của method flush của outputstream
Hi there,
Không biết tớ có miss gì không, cơ mà method nào vậy cậu?
EDIT: À, method flush
của OutputStream à cậu?
Để tớ nói với cậu 1 bí mật nhé, dựa trên 1 tài liệu tuyệt mật Javadoc giấu tên:
The
flush
method ofOutputStream
does nothing.
Hope it helps!
có thật là ko làm gì ko bạn , bạn thử viết đoạn code nào đó sử dụng method này chưa ?
vd: đoạn code dưới lấy ouputstream từ socket , viết data vào và đẩy data đó về server
OutputStream output = mServerSocket.getOutputStream();
output.write(data);
output.flush();
nếu ko chạy method flush thì nó sẽ ko đẩy bất cứ dữ liệu về server , nhưng sau khi chạy method flush thì nó mới đẩy về ? vậy thì tại sao nói nó ko làm gì ?
Phương thức flush()
của OutputStream
đúng là không làm gì thật, vì OutputStream
là lớp trừu tượng (abstract).
Nhưng các lớp kế thừa từ nó thì có.
Như @SITUVN.gcd có giải thích ở trên, OutputStream object của cậu thực ra là thể hiện của subclass của OutputStream. Cậu nên debug để biết rõ class của thể hiện đó là gì (tớ không biết mServerSocket của cậu là instance của class gì, và được tạo ra như thế nào, nên không nói được thể hiện của getOutputStream). Nó khác với câu hỏi của cậu, rằng method flush của OutputStream hoạt động như thế nào.
Cậu có thể đọc thêm java doc để biết thêm chi tiết về OutputStream#flush. Từ đây, cậu có thể hiểu lý do sao tớ bảo nó không làm gì cả.
Btw, OutputStream mà cậu đề cập tới là thể hiện của class nào thế?
mình dùng đối tượng của lớp java.net.Socket để get outputstream , rồi dùng ouptstream đó để truyền data thôi , ok mình biết phải tìm gì rồi …