Я пишу утилиту на Java, которая читает поток, который может содержать как текстовые, так и двоичные данные. Я хочу избежать ожидания ввода-вывода. Для этого я создаю поток, который продолжает читать данные (и ждет их), помещая их в буфер, чтобы клиенты могли проверить доступность и прекратить ожидание в любое время (закрыв входной поток, который сгенерирует IOException и прекратит ожидание). ). Это работает очень хорошо, поскольку чтение байтов из него; что касается двоичного кода.
Теперь я также хочу, чтобы клиент мог легко читать строки из него, например '.hasNextLine()'
и '.readLine()'
. Без использования потока ожидания ввода-вывода, такого как буферизованный поток, ( Q1 ). Как я могу проверить, содержит ли двоичный файл (byte []) допустимую строку Unicode (в форме длины первой строки) )? Я смотрю на API String / CharSet, но не могу его найти (или мне его не хватает?). (ПРИМЕЧАНИЕ. Если возможно, я не хочу использовать не встроенную библиотеку).
Поскольку я не смог найти его, я пытаюсь его создать. Не будучи таким сложным, вот мой алгоритм.
1). Я смотрю с начала байтового массива, пока не найду '\ n' или '\ r' без '\ n'.
2). Затем я вырезал байтовый массив от начала до этой точки и использовал его для создания строки (с CharSet, если указан), используя 'new String(byte[])'
или 'new String(byte[], CharSet)'
.
3). Если этот успех без исключения, мы нашли первую правильную строку и вернем ее.
4). В противном случае эти байты могут не быть строкой, поэтому я смотрю дальше на другой '\ n' или '\ r' w / o '\ n'. и этот процесс повторить.
5. Если поиск заканчивается в конце доступных байтов, я останавливаюсь и возвращаю ноль (допустимая строка не найдена).
У меня вопрос ( Q2 ). Адекватен ли следующий алгоритм?
Как раз в то время, когда я собирался реализовать это, я искал в Google и обнаружил, что есть много других кодов для новой строки, например U + 2424 , U + 0085, U + 000C , U + 2028 и U + 2029 .
Итак, мой последний вопрос ( Q3 ), действительно ли мне нужно обнаружить этот код? Если я это сделаю, увеличит ли это вероятность ложной тревоги?
Мне хорошо известно, что распознавать что-то из двоичных файлов не является абсолютным. Я просто пытаюсь найти лучший баланс.
Подводя итог, у меня есть массив байтов, и я хочу извлечь из него первую допустимую строку строки с / без определенного CharSet. Это должно быть сделано в Java и избегать использования любой не встроенной библиотеки.
Заранее всем спасибо.