Blog hướng dẫn các cách download kiến thức kinh nghiêm thủ thuật chia sẻ phần mềm tool soft miễn phí là gì. Blog.locbanbekhongtuongtac.com

Table of Content

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
Em code theo 1 bác trên mạng về một ứng dụng chat đơn giản dùng Socket
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);
}
}
}
Class Client
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
Quote:
Originally Posted by elonmusk12 View Post
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
thím minh hoạ cụ thể được k ạ
Quote:
Originally Posted by BaronNashor View Post
thím minh hoạ cụ thể được k ạ
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
Quote:
Originally Posted by amoniac06 View Post
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
Đúng roài, sau khi thím ăn phở xong, chủ quán có 2 lựa chọn, dùng tô mới để phục vụ khách tiếp theo, hoặc rủa tô (cái này là flush)

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

Video liên quan

Post a Comment