Использование чего-то другого вместо String

1

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

Мой нынешний подход:

public ResultSet getResultSet(String fileName) throws IOException {

    InputStream in = new FileInputStream(fileName);

    byte[] buffer = new byte[CAPACITY];
    byte[] doubleBuffer = new byte[2 * CAPACITY];


    long len = in.read(doubleBuffer);
    while (true) {
        String reconstitutedString = new String(doubleBuffer, 0 ,doubleBuffer.length);

        //...do stuff

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        os.write(doubleBuffer, CAPACITY, CAPACITY);
        readUntilNow += len;
        len = in.read(buffer);
        if (len <= 0) {
            break;
        }
        os.write(buffer, 0, CAPACITY);
        doubleBuffer = os.toByteArray();
        os.close();
    }
    in.close();
    return makeResult();

}

Я хотел бы изменить String restore article в другое. Какая была бы лучшая альтернатива, учитывая, что я хочу получить некоторую информацию о содержании этих данных, информацию, которую я могу получить, обращаясь к IndexOf на строку

  • 1
    Так как это методы класса String, почему вы предполагаете, что есть альтернатива? Вы можете использовать StringBuilder для его создания, но вам все равно понадобится значение String для выполнения этих действий. Если, конечно, вы не захотите создать свою собственную реализацию и переписать все эти методы.
  • 0
    Ну, я не ищу альтернативу с такими же точными методами. Пока у меня есть способ получить тот же результат, что и indexOf, я рад.
Показать ещё 4 комментария
Теги:
string
bytearray

3 ответа

0
Лучший ответ

Вы можете использовать StringBuffer или StringBuilder. Этот два класса почти как класс String с преимуществом изменчивости.

Кроме того, вы можете легко преобразовать их в String всякий раз, когда вам нужна какая-то функциональность, которую предоставляет только String. Чтобы преобразовать их, вы можете просто использовать метод toString().

Вы можете использовать другой тип данных в качестве альтернативы String на основе вашей ситуации. Но в целом StringBuffer и StringBuilder - лучшая альтернатива вместо строки. Используйте StringBuffer для синхронизации и StringBuilder в другом случае.

  • 0
    Вы можете split их? Нет, ты не можешь.
  • 0
    Tichodroma: конечно нет, но вы можете получить String от них, и разделить на это.
Показать ещё 4 комментария
0

Самым естественным выбором был бы CharBuffer. Подобно String и StringBuilder он реализует interface CharSequence, поэтому его можно использовать с множеством текстовых API-интерфейсов, в первую очередь с механизмом регулярных выражений, который является CharSequence для большинства операций поиска, разделения и замены.

Что делает CharBuffer естественным выбором в том, что он также является типом, который используется пакетом charset, который обеспечивает необходимые операции для преобразования символов из и в байты. Имея дело с этим API, вы можете сделать преобразование непосредственно из и в CharBuffer без дополнительных шагов копирования данных.

Обратите внимание, что Javas regex API подготовлен для обработки буферов, содержащих частично прочитанные файлы, и может сообщить, может ли чтение большего количества данных изменить результат (см. hitEnd() и requireEnd()).

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

0

Лучшим типом для split или indexOf on является String. Просто используйте его.

  • 0
    У меня действительно огромные файлы. И я очень хочу избавиться от String . И, как я уже говорил в другом комментарии, мне нужен способ получить тот же результат, что и у indexOf, не очень заинтересованный в возможности вызвать indexOf для моей альтернативы.
  • 0
    Затем вы должны использовать StringBuilder или StringBuffer и легко конвертировать их в String с помощью метода toString() когда вам нужна какая-то только специфическая для String операция. Доказано, что StringBuilder и StringBuffer намного быстрее, чем String

Ещё вопросы

Сообщество Overcoder
Наверх
Меню