Java чтение файла побайтово

использование java.util.Scanner для чтения файла побайтно

Я пытаюсь прочитать символ одной строки символом с помощью java.util.Scanner. Однако я получаю это исключение «:

Exception in thread "main" java.util.InputMismatchException: For input string: "contents of my file" at java.util.Scanner.nextByte(Scanner.java:1861) at java.util.Scanner.nextByte(Scanner.java:1814) at p008.main(p008.java:18)  
public static void main(String[] args) throws FileNotFoundException < File source = new File("file.txt"); Scanner scanner = new Scanner(source); while(scanner.hasNext()) < System.out.println((char)scanner.nextByte()); >scanner.close() > 

Есть ли у кого-нибудь идеи относительно того, что я могу делать неправильно? Изменить: я понял, что написал hasNext() вместо hasNextByte(). Однако, если я это сделаю, он ничего не распечатает.

4 ответа

Почему вы хотите использовать сканер для чтения байта файла байтом? Это похоже на использование тачки для переноса кармана. (Если вам действительно нужна тачка для замены кармана, сообщите мне, чтобы я стал вашим другом).

Но серьезно: Class InputStream читает байты из файла, просто и надежно, и ничего не делает.

Класс scanner был недавно введен в API Java, поэтому примеры учебников могли вытащить данные из файла с меньшей болью, чем обычно с использованием каскада new BufferedReader(new InputStream) . Его специальность вводит числа и строки из входных файлов свободной формы. Метод nextByte() фактически считывает одну или несколько десятичных цифр из входного потока (если они есть) и преобразует число, сканируемое таким образом, в однобайтовое значение.

И если вы читаете байты, зачем вы их выводите как char s? Байты не являются символами, и взаимное преобразование грубой силы не удастся в некоторых местах. Если вы хотите увидеть значения этих байтов, распечатайте их так, как они есть, и вы увидите маленькие целые числа от 0 до 255.

Если вы хотите прочитать char из файла, FileReader - это класс для вас.

У меня есть текстовый файл, начинающийся со слова «Аннотация» (что удивительно ..). В любом случае, когда я пытаюсь читать с помощью: Сканер сканер = новый сканер (файл); byte b = scanner.nextByte (); Я получаю исключение java.util.InputMismatchException. Почему я не вижу значений от 0 до 255, не могли бы вы помочь? Файл UTF-8.

Мой ответ объяснил это, но, возможно, не очень хорошо. Сканер читает и интерпретирует ввод текстовой формы, а не низкоуровневые байты! Попробуйте создать файл, первая строка которого читается как 1 10 100 1000 hello и прочитайте его с помощью Scanner.nextByte() . Вы успешно прочитаете и вернете в виде байтов числа 1, 10 и 100, но на 1000 произойдет исключение и (если вы прочитали после этого) на «привет», потому что это не те значения, которые могут быть представлены в байте.

Сканер предназначен для синтаксического анализа текстовых данных - его метод nextByte() предполагает, что ввод состоит из цифр (возможно, предшествует знак).

Возможно, вы захотите использовать FileReader , если вы действительно читаете текстовые данные, или FileInputStream , если это двоичные данные. Или FileInputStream , завернутый в InputStreamReader , если вы читаете текст с определенной кодировкой символов (к сожалению, FileReader не разрешить вам указывать кодировку, но неявно использует кодировку по умолчанию платформы, что часто не очень хорошо).

Источник

Как происходит считывание побайтово (InputStream) для символов >255 бит.

Возможно глупый вопрос, но хочется разобраться в некоторых фундоментальных вещах. Допустим имеем код:

public class MyTEST  public static void main(String[] args)  Scanner scanner = new Scanner(System.in); try  FileInputStream fileInputStream = new FileInputStream(scanner.nextLine()); while (fileInputStream.available()>0) int data = fileInputStream.read(); System.out.print(data+" "); System.out.println((char)data); > fileInputStream.close(); scanner.close(); > catch (Exception e)  e.printStackTrace(); > > >

Считываем побайтово файл и выводим на консоль в виде 10-чного представления байта и соответствующего ему символьного. Просьба знающих пояснить. Допустим в файле имеется английская "A" и все. Получим в консоле

что логично. Откроем например https://unicode-table.com/ru/#0410 найдем английскую A и видим, что в десятичном представлении её значение равно 65. Поменяем в исходном файле английскую A на русскую A и результат будет следующий:

Значение буквы А русского алфавита - 1040 в десятичном формате. Понятно в представление байта это не влезет. И я понимаю, что внутри идет разбивка на несколько байтов, но хотелось бы узнать подробнее. Может кто подскажет или поделиться нужной ссылкой?

Источник

Побитовое чтение файла

inputStream.read(bytes); Когда вызывается этот метод, он читает единственный байт из файла и возвращает его как целое число.

если в файле всего один символ. Например "ф". То чему будет равено bytes[0] ?
Как определяется какая используется кодировка? какой символ не может быть записан в элемент массива?

Побитовое чтение массива
Есть массив byte. Необходимо считать данные побитово. То есть начало определенного фрагмента может.

Побитовое чтение файла
1.Взять файл C:\1.jpg(например) 2.Побитно записать его в C:\2.jpg(например) Я уже пару дней видел.

Побитовое чтение файла
приветствую всех! Возник вопрос. Необходимо открыть файл(любого формата) побитово, как это лучше.

Побитовое чтение текстового файла
Здравствуйте, перейдем сразу к делу: Нужно побитово считать текстовый файл и далее к каждому биту.

ЦитатаСообщение от werrt Посмотреть сообщение

ЦитатаСообщение от werrt Посмотреть сообщение

ЦитатаСообщение от werrt Посмотреть сообщение

Привет, рекомендую почитать:
Java 2 Том I. Основы библиотеки профессионала Хорстман, Корнел
Глава 12. Потоки и файлы с 729 ст.

спасибо, попробую почитать

Добавлено через 11 часов 2 минуты
не нашел ответа в книге

Открытие и побитовое чтение jpeg-файла
Здравствуйте уважаемые участники форума. Прошу подсказать, как лучше справиться с задачей.

Как выполнить побитовое чтение файла mp3?
Здравствуйте! Подскажите, пожалуйста, как выполнить побайтовое чтение файла mp3?

какая функция осуществляет побитовое чтение файла
какая функция осуществляет побитовое чтение файла подскажите кто знает .

Побитовое чтение
Есть файл видео и мне известна его структура. Например структура следующая: 8 бит 1 бит 1 бит.

Побитовое чтение из поля SqLite
Пробовал так вот const string databaseName = @"C:\MyProj\base.db"; SQLiteConnection connection.

Побитовое чтение/запись в файл
Добрый день. Мне нужно реализовать класс, который дает возможность побитовой записи/четения в/из.

Источник

Читайте также:  Перевод из десятичной в шестнадцатеричную систему счисления java
Оцените статью