Более эффективный способ преобразования файла в байтовый массив в строку и обратно - PullRequest
1 голос
/ 19 октября 2011

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

        InputStream is = new FileInputStream(new File("c:/original.png"));
        String temp = Hex.encodeHexString(IOUtils.toByteArray(is));
        System.out.println(temp);
        byte[] b = Hex.decodeHex(temp .toCharArray());
        OutputStream out = new FileOutputStream(new File("c:/copy.png"));
        IOUtils.write(b, out);

Работает нормально.Проблема в размере temp строки.Если файл c:/original.png равен 1523KB, то размер temp равен 3046KB.Есть ли более эффективный способ преобразования файла в строку, которая бы не удваивала размер файла?(Кстати, я понимаю, почему это примерно в два раза больше)

В качестве альтернативы, как бы я пошел на сжатие строки temp?

Насколько причина для строки.Он хранится в кеше, который будет принимать только строки.Файл фактически загружается на веб-сервер.Как только выгрузка будет готова, она будет извлечена из кеша, а не из базы данных.И кэш предназначен для повышения производительности поиска с помощью прогнозов, что я не хочу вызывать базу данных каждый раз, когда кто-то ищет.

1 Ответ

3 голосов
/ 19 октября 2011

Более эффективной кодировкой, чем Hex, является Base64, накладные расходы стремятся как минимум к 37% для больших файлов. К сожалению, для него нет стандартной библиотеки, но Apache Commons содержит класс для этого.

        String temp = Base64.encodeBase64String(IOUtils.toByteArray(is));            
        byte[] b = Base64.decodeBase64(s);
...