Flush buffer là gì
Quote:
Em có search google và hiểu được flush là để đẩy dữ liệu ngay lập tức từ bộ đệm (Buffer) vào ổ đĩa cứng. Còn nếu không dùng flush thì khi nào bộ đệm đầy nó mới bắt đầu đẩy dữ liệu
Cái em không hiểu là người ta dùng flush để làm gì (Chỗ em tô đỏ). Trong khi em thử xóa flush đi thì kết quả chạy vẫn y hệt

Với cả khi em thử xóa flush đi, ví dụ em nhập dấu chấm ở bên client thì server cũng nhận được luôn, chả nhẽ 1 dấu chấm đã làm đầy bộ đệm ạ

Class Server
Quote:
package NetworkInJava;import java.io.*;
import java.util.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
//Tao mot server sockeet voi cong la 1021
ServerSocket server = new ServerSocket(1021);
//Server chap nhan du lieu tu cac client co cung port 1021
Socket socket = server.accept();
//tao luong gui tra ket qua cho client
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
//Tao luong nhan du lieu tu client toi
DataInputStream in = new DataInputStream(socket.getInputStream());
Scanner input = new Scanner(System.in);
while (true) {
//Doc du lieu tu clien tra ve
String str = in.readUTF();
if (str.equalsIgnoreCase("q")) {
break;
}else{
System.out.println("Client: " + str);
}
//Gui du lieu cho client
System.out.println("\nI: ");
out.writeUTF(input.nextLine());
out.flush();
}
in.close();
out.close();
socket.close();
server.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
Quote:
package NetworkInJava;import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.io.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try{
//Khai báo IP và PORT
Socket socket = new Socket("localhost", 1021);
//gửi dữ liệu sang server
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
DataInputStream in = new DataInputStream(socket.getInputStream());
Scanner input = new Scanner(System.in);
while(true){
//Gui du lieu len server
System.out.println("\nI: ");
out.writeUTF(input.nextLine());
out.flush(); -> Tác dụng của cái này là gì ạ?
//doc du lieu tu server ve
String str = in.readUTF();
if(str.equalsIgnoreCase("q")){
break;
}else{
System.out.println("Server: " + str);
}
}
in.close();
out.close();
socket.close();
}catch(Exception e){
System.err.println(e);
}
}
}
khi thím mở một data stream, đưa dữ liệu vào và gửi, thím muốn lần tiếp theo vẫn dùng data stream đó để gửi tiếp, thì phải flush để xoá hết dữ liệu trong buffer trước khi load data mới vào.
Gửi từ bb 9000 bằng vozFApp
Gửi từ bb 9000 bằng vozFApp
Quote:
Originally Posted by elonmusk12
khi thím mở một data stream, đưa dữ liệu vào và gửi, thím muốn lần tiếp theo vẫn dùng data stream đó để gửi tiếp, thì phải flush để xoá hết dữ liệu trong buffer trước khi load data mới vào.
Gửi từ bb 9000 bằng vozFApp
Gửi từ bb 9000 bằng vozFApp
Quote:
Originally Posted by BaronNashor

thím minh hoạ cụ thể được k ạ
Gửi từ Xiaomi MI 6 bằng vozFApp
Quote:
Originally Posted by amoniac06

thím ra ăn phở, thím ăn xong có phải người chủ quán cầm tô phở vào rửa sạch để nguoeì sau ăn :ad
Gửi từ Xiaomi MI 6 bằng vozFApp
Gửi từ Xiaomi MI 6 bằng vozFApp
Gửi từ bb 9000 bằng vozFApp
Bình thường ko cần nhé thím, nếu stream wrapper ví dụ như bufferwriter thì khi thím close nó sẽ gọi flush bên trong rồi.
Flush là đổ data vào stream mà ko đóng nó lại.
Trong ví dụ của thím, giờ bỏ close với bỏ flush đi thì sẽ ko nhận đc msg đâu.
Bỏ close nhưng ko bỏ flush thì sẽ nhận đc msg
Sent from My fucking great phone using vozFApp

Flush là đổ data vào stream mà ko đóng nó lại.
Trong ví dụ của thím, giờ bỏ close với bỏ flush đi thì sẽ ko nhận đc msg đâu.
Bỏ close nhưng ko bỏ flush thì sẽ nhận đc msg
Sent from My fucking great phone using vozFApp