Даже если это двухбайтный юникод, будут крякозябры! Объясняю ещё раз. Считываем побайтно и приписываем каждый байт по очереди к строке. А каждый байт (БАЙТ, но не СИМВОЛ) в строке становится юникодным. Тебе ВО ВРЕМЯ ЧТЕНИЯ из интернета нужно по два байта объединять и только тогда присоединять к строке. Типа считываешь один байт, умножаешь его на 256, потом считываешь второй байт, прибавляешь его к предыдущему И ТОЛЬКО ПОСЛЕ ЭТОГО присоединяешь то, что получилось, с меткой (char) к строке.
- - -
Только дописал и сообразил, что у тебя не двухбуйтный юникод. Юникод ведь не так вроде в файлах хранят. У тебя скорее всего UTF-8. Вот моя функция как раз парсит принимаемый поток байт. Она имеет 4 "буферных" байта:
int b1,b2,b3,b4;
Именно четыре байта нужно, чтобы хранить самые "большие" символы в UTF-8. А из скольки именно состоит символ можно узнать по первому байту. Вот так и парсится поток. Но чуть сложнее, чем я выше описал, так как нужно ещё в юникод перевести полученный текст. Кто серьёзно хочет вникнуть, прочитайте в википедии про UTF-8 и UNICODE, и зацените же, наконец, мою функцию. Я старался =) Поймите же, мультибайтные кодировки просто так в строку не запишешь в Java (да и вообще наверное нигде).
- - -
Я не знаю, как ещё понятнее объяснить. В Java в строках используется ВСЕГДА UNICODE. Если мы что-то присваиваем к строковой переменной, то каждый "байт" в этой строке имеет код юникода (то есть он может быть и больше 255, то есть это не байт даже, а символ). Даже если вы считываете однобайтную кодировку типа ANSI, то при присваивании такого текста строке происходит конвертация в юникод ВСЕХ символов с кодами больше 127 (те, что меньше 128 и в юникоде тоже один байт). То есть КОДЫ БАЙТОВ меняются и становятся больше 255. Байт имеет свой старый код, пока его не приконкатенировали к строке.
- - -
Ща напишу функцию, которая будет при вызове считывать ОДИН символ из потока (UTF-

. Но это совершенно НЕ ОЗНАЧАЕТ, что из потока при вызове этой функции будет считатан ровно один байт. Если байт в потоке не в UTF-8, то... Даже хз пока что будет, так как парсер сбиться может. Подумаю ещё.