Java BitSet - оболочка для размещения символов / строк - PullRequest
2 голосов
/ 03 января 2011

Я использую BitSet в Java для хранения значений, которые необходимо сериализовать и десериализовать в / из более низких уровней абстракции. Это для создания контейнера формата файла.

В настоящее время я хочу сохранить строку в BitSet:

private BitSet string_to_bit(String content_string) {

        BitSet result = new BitSet(this.size);

        char[] content_string_arr = new char[content_string.length()];
        for (char c : content_string_arr) {
            int tmp = (int) c;
            result += Integer.toBinaryString(tmp);
        }
}

+ = не определено в BitSet, поэтому код неверен в этой точке. Afaik Я не могу переопределить операторы в Java 6. Как бы вы элегантно обернули эту операцию? Я не хочу в конечном итоге повторять все эти низкоуровневые преобразования снова и снова, потому что, как кажется, они повторяются. Есть ли какой-то эквивалент .toBit? Я могу привести BitSet к String с помощью toString (). Почему нет абстракции?

Лучший, Мариус

Ответы [ 4 ]

2 голосов
/ 03 января 2011

Насколько я знаю, нет .toBit() эквивалента. Вы должны написать свою собственную реализацию.

Вот две ссылки, которые могут быть вам полезны: Преобразование между BitSet и байтовым массивом

и Преобразование набора битов в массив int и строку

2 голосов
/ 03 января 2011

Мне кажется странным, что вы используете BitSet для сериализации.Это на самом деле не предназначено для этого.Я бы посоветовал изменить этот подход в первую очередь, так как в долгосрочной перспективе он избавит вас от многих неприятностей.

Рассматривали ли вы вместо этого DataOutputStream ?Это гораздо более стандартный подход и имеет те преимущества, что все служебные методы, необходимые для написания строк и других типов данных, уже доступны для использования ....

1 голос
/ 03 января 2011

Выровнен ли ваш байт данных? Вы можете использовать ByteBuffer .

Насколько я знаю, java не предоставляет функций или классов для ввода-вывода на битовом уровне.

1 голос
/ 03 января 2011

Похоже, что ваш код не будет делать то, что вы хотите.Для начала, ваш массив всегда будет заполнен \ 0 (nul) символами.Возможно, то, что вы хотели, намного проще.

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

private static byte[] string_to_bytes(String text) {
    return text.getBytes();
}

Обычно файлы содержат байты, а не биты.

...