|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
Алгоритм: 1). Читаем данные из файла в буфер, размером например [1023] байта. Код: java 1.
2). Преобразуем его в строку в нужной кодировке. Код: java 1.
3). Выводим на экран. 4). Повторяем шаги 1-3 до конца файла. Правильно ли я понимаю, что: Разные кодировки используют различное количество байт для кодирования, и, если мы будем читать данные порциями, то для нашего алгоритма какой нибудь символ может "порваться". Если да, то как можно "стыковать" считываемые блоки (При условии, что кодировка может быть любой)? Код: java 1. 2. 3.
Набросал небольшой код, который преобразует строку в набор байт в кодировке "UTF-16". А потом в цикле считывает байты от 0 до длины буфера-i и преобразовывает в строку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Результат: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Результат, если читаем с i-того байта до конца: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 18:17 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
faustgreen, нет нет все неправильно. Парсер Utf-8 - это конечный автомат который помнит состояние в переходах между байтами. И если ты неудачно порезал текстовый файл на куски то теоретически ты разрезал 1 символ на 2 байта которые порознь не имеют смысла и это состояние парсера надо передавать между блочными итерациями алгоритма. Но чтобы ты не изобретал велосипед - в JDK уже есть коробоные механизмы которые работают. Посмотри на следующий стек из компонентов. Код: java 1. 2. 3. 4. 5. 6.
Вот работай на уровне reader или bufferedReader. Читать текстовый файл двоичными операциями это либо баловство либо просто студенческая работа из серии "посмотреть что будет". В обоих случаях качество твоего кода на выходе будет плохим т.к. тебе сложно поддержать на 100% спецификации Unicode. Их много и они нудные. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 18:31 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
faustgreen Правильно ли я понимаю, что: гуглить не пробовал ? ты правильно понимаешь - разный кодировки на то и разные ) где то на символ 2 байта ,где то 8 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 23:17 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
iJava ....где то 8 Где? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 23:41 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev iJava ....где то 8 Где? UTF-8 например? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 10:06 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
asv79 UTF-8 например? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 11:06 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
asv79 Leonid Kudryavtsev пропущено... Где? UTF-8 например? Логично. В UTF-8 до 8 байт. Тогда в UTF-16 до 16 байт, а в UTF-32 - до 32 байт. Гуглить не пробовал? (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 11:54 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
Alexander A. Sak asv79 пропущено... UTF-8 например? Логично. В UTF-8 до 8 байт. Тогда в UTF-16 до 16 байт, а в UTF-32 - до 32 байт. Гуглить не пробовал? (с) Твоя репутация подмочена. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 12:11 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
Basil A. Sidorov asv79 UTF-8 например? я имел ввиду бит а не байт) простите великодушно) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:54 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
asv79 я имел ввиду бит а не байт) простите великодушно) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 21:25 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
asv79 я имел ввиду бит а не байт) простите великодушно) Древний RFC на FTP ещё рассматривает системы с разной разрядностью, а всё более-менее современное, если требуется, явно оговаривает "clear eight bit" и пользуется терминами октет и байт как синонимами. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 06:56 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
asv79 Basil A. Sidorov пропущено... Опять мимо - от одного до четырёх байт на кодовую точку. я имел ввиду бит а не байт) простите великодушно) но только в UTF-8 символы не 8 битами кодируются, опять мимо, в зависимости от самого символа, это может быть 8, 16 и 32 бита ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 17:40 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
Roman Mejtes но только в UTF-8 символы не 8 битами кодируются, опять мимо, в зависимости от самого символа, это может быть 8, 16 и 32 бита Код юникода, как ему и положено, является целым числом. Разрядность этого числа ограничена - двадцать один бит . Сколько байт будет использовать кодировка юникода - зависит от кодировки. Только всё это никак не меняет того простого факта, что "байт" и "октет" уже давно - синонимы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 17:58 |
|
Чтение строки порциями и объединение результата
|
|||
---|---|---|---|
#18+
Roman Mejtes но только в UTF-8 символы не 8 битами кодируются, опять мимо, в зависимости от самого символа, это может быть 8, 16 и 32 бита ты сам себе противоречишь) не кодируются 8 битами,кодируются 8 ,16,32 и почему ты пропустил 3 октета ,тобишь 24 бита? тоесть вы прямо сейчас поставил китайцев ,японцев ,грузинов и прочих людей перед выбором писать латиницей или забыть свой алфавит?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2020, 11:26 |
|
|
start [/forum/topic.php?fid=59&fpage=17&tid=2120890]: |
0ms |
get settings: |
13ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
28ms |
get topic data: |
41ms |
get forum data: |
1ms |
get page messages: |
310ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 705ms |
0 / 0 |