Chúng tôi đang làm việc để giảm độ trễ và tăng hiệu suất của một quá trình được viết bằng Java tiêu thụ dữ liệu (xml strings) từ socket thông qua phương thức readLine() của lớp BufferedReader. Dữ liệu được phân cách bằng dấu phân cách cuối dòng (\ n) và mỗi dòng có thể có độ dài biến đổi (6KBits - 32KBits). mã của chúng tôi trông giống như:Java: Hiệu quả của phương thức readLine của BufferedReader và các lựa chọn thay thế có thể
Socket sock = connection;
InputStream in = sock.getInputStream();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(in));
...
do
{
String input = inputReader.readLine();
// Executor call to parse the input thread in a seperate thread
}while(true)
Vì vậy, tôi có một vài câu hỏi:
- Liệu inputReader.readLine() phương thức hoàn trả ngay sau khi nó chạm nhân vật \ n hoặc nó sẽ đợi cho đến khi bộ đệm đầy?
- Có nhanh hơn khi chọn dữ liệu từ ổ cắm hơn là sử dụng bộ đệmBufferedReader không?
- Điều gì sẽ xảy ra khi kích thước của chuỗi đầu vào nhỏ hơn kích thước bộ đệm nhận của Socket?
- Điều gì sẽ xảy ra khi kích thước của chuỗi đầu vào lớn hơn kích thước bộ đệm nhận của Socket?
Tôi đang nắm bắt (chậm) với thư viện IO của Java, vì vậy mọi con trỏ đều được đánh giá cao.
Cảm ơn bạn!
Tôi đoán bạn đang sử dụng định dạng dành riêng cho ứng dụng - các dòng mới và khoảng trắng nói chung không có ý nghĩa trong XML. – mdma
Có, xin lỗi phải rõ ràng hơn.Chúng tôi đang tiêu thụ dữ liệu trực tuyến từ một ứng dụng bên ngoài thông qua kết nối TCP. Mỗi thông điệp XML được phân tách bằng ký tự \ n. Tôi cho rằng nó giống hệt nhau để đọc một tập tin tuần tự trong đó mỗi dòng là một tài liệu xml hoàn chỉnh. – Luhar