Я только что задал вопрос о том, почему не работает моя нить. Это закончилось тем, что readLine()
заблокировал мой поток, прежде чем флаг завершения работы мог быть распознан. Это было легко исправить, проверив ready()
перед вызовом readLine()
.
Однако теперь я использую DataInputStream
для последовательного выполнения следующих действий:
int x = reader.readInt();
int y = reader.readInt();
byte[] z = new byte[y]
reader.readFully(z);
I знаю, что я мог бы реализовать свою собственную буферизацию, которая проверяла бы флаг запущенного файла при загрузке буфера. Но я знаю, что это было бы утомительно. Вместо этого я мог позволить буферизовать данные в классе InputStream
и подождать, пока у меня прочитаются мои n
байты, прежде чем выполнять неблокирующее чтение - поскольку я знаю, сколько мне нужно прочитать.
4
байт для первого целого числа 4
байт для второго целого числа y
- и
y
байт для z
байтового массива.
Вместо использования ready()
для проверки, есть ли строка в буфере, есть ли какой-нибудь эквивалент ready(int bytesNeeded)
?