Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бинарный файл, откуда лишние символы. 
V
    Опции темы
antsh85
Дата 12.1.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.1.2008

Репутация: нет
Всего: нет



Всем привет. Изучаю как работать с бинарными файлами. Проблема заключается в том, что я не понимаю почему после некоторых букв в бинарный файл пишется нулевой символ.
Пример:
Char -> 
1) Я поочереди записываю в файл байт информации: "a" "b" "c" "1" "156"
2) Считываю по байту из файла и получаю
 
Char ->  -> int -> 0 binary ->0                         <------- первый символ мне понятен, он говорит о начале файла 
Char -> a int -> 97 binary ->1100001
Char ->  -> int -> 0 binary ->0                         <------- но вот этот откуда тут взялся?
Char -> b int -> 98 binary ->1100010
Char ->  -> int -> 0 binary ->0                         <------- и этот?
Char -> c int -> 99 binary ->1100011
Char ->  int -> 1 binary ->1
Char -> ? int -> 156 binary ->10011100


Код для тестирования:
Код


import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BinOutputFileApp {

    private static FileInputStream fis = null;

    private static final String fileName = "numerical.dat";

    public static void main(String arg[]) {
        writeFile();
        readFile();
    }

    private static void writeFile() {
        File file = new File(fileName);


        try {
            FileOutputStream file_output = new FileOutputStream(file);
            DataOutputStream data_out = new DataOutputStream(file_output);

            data_out.writeChar('a');
            data_out.writeChar('b');
            data_out.writeChar('c');
            data_out.write(1);
            data_out.write(156);

            file_output.close();
        } catch (IOException e) {
            System.out.println("IO exception = " + e);
            return;
        }
    }

    private static void readFile() {

        try {
            fis = new FileInputStream(fileName);
        } catch (IOException ioex) {
            ioex.printStackTrace();
            return;
        }

        try {
            int c = -1;
            char chr = 0;

            while ((c = fis.read()) != -1) {
                chr = (char) c;
                String binString = getBitArray(c);
                System.out.println("Char -> " + chr + " int -> " + c + " binary ->" + binString);
            }
            
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

    private static String getBitArray(int charInt) {
        String bitString = Integer.toBinaryString(charInt);
        return bitString;
    }

}





PM   Вверх
nornad
Дата 12.1.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(antsh85 @  12.1.2008,  18:38 Найти цитируемый пост)
Проблема заключается в том, что я не понимаю почему после некоторых букв в бинарный файл пишется нулевой символ.

А вы не в курсе, что char - это 2 байта unicode? Там часто нолик первым идёт. smile

Добавлено через 1 минуту и 59 секунд
Цитата(antsh85 @  12.1.2008,  18:38 Найти цитируемый пост)
первый символ мне понятен, он говорит о начале файла

Интересная логика. А почему не 127 например? Или 255. Или другое число? С чего вы взяли, что первы 0 - это начало файла? С того, что он первый вв файле?


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
antsh85
Дата 12.1.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.1.2008

Репутация: нет
Всего: нет



Да вы правы. Я перепутал с С, там Char 1 байт. Мне почему то казалось что и в Яве всё так же, а нет smile Спасибо теперь всё стало ясно.

Это сообщение отредактировал(а) antsh85 - 12.1.2008, 17:26
PM   Вверх
nornad
Дата 12.1.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Отметьте, плиз, тему как решённую (у вас вверху темы есть для этого кнопка).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.