Как перевести из Blob в BZ2 ? (Firebird и Java)

79
06 января 2022, 16:10

Нужно считать файл, хранящийся в формате blob из базы данных firebird (Сам файл является архивом в формате bz2). Испробовал уже кучу вариантов, не могу понять в чем ошибка.

SQL запрос:

Раньше было так:

String query = "Select FILENAME, DOKUMENTDATA from KONTAKTDOKUMENT " +
                    "where KONTAKTDOKUMENTARTID=11 AND KONTAKTDOKUMENTID=" + kunde.getId() + ";";

Теперь исправил на такое:

String query = "Select FILENAME, cast(DOKUMENTDATA as BLOB SUB_TYPE TEXT) DOC  from KONTAKTDOKUMENT " +
                    "where KONTAKTDOKUMENTARTID=11 AND KONTAKTDOKUMENTID=" + kunde.getId() + ";";

Дальше читаю и обрабатываю так:

                    InputStream is = rs.getBinaryStream(2);
                    String str = convert(is);
                    System.out.println(fileName);
                    File file = new File("E:\\Study\\alfresco\\zip", fileName + ".pdf.bz2");
                    FileOutputStream outputStream = new FileOutputStream(file);
                    outputStream.write(str.getBytes());
                    outputStream.close();

Метод convert:

private static String convert(InputStream is) {
    BufferedInputStream bis = new BufferedInputStream(is);
    ByteArrayOutputStream buf = new ByteArrayOutputStream();
    int result;
    String str = null;
    try {
        result = bis.read();
        while (result != -1) {
            buf.write((byte) result);
            result = bis.read();
        }
        str = buf.toString("iso-8859-1");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return str;
}

Один из вариантов, что ошибка в кодировке (Но когда исправил на iso-8859-1 имена файлов стали нормально читаться, а вот сам архив - нет , пишет, что повреждена контрольная сумма)

Эту строку уже пробовал в различных вариациях и комбинациях (utf-8, iso-8859-1, ISO8859_1 ) .

str = buf.toString("iso-8859-1");

Сейчас подключаюсь к бд так, но пробовал и через юникод

?encoding=ISO8859_1;characterEncoding=ISO8859_1
READ ALSO
Нужно извлечь минуты из определенного периода времени

Нужно извлечь минуты из определенного периода времени

Нужно научить мой ChequeMaker считать минуты только в период времени с 9 по 21Я пишу парковку и там платное время с 9 до 21 и только это время меня интересует,а...

208
IndexOutOfBoundsException для пустой строки в конце файла

IndexOutOfBoundsException для пустой строки в конце файла

Есть такой код, читающий файл:

153
Как выбрать список сущностей с кастомным набором полей через Criteria API, если у сущности есть связанная коллекция других сущностей?

Как выбрать список сущностей с кастомным набором полей через Criteria API, если у сущности есть связанная коллекция других сущностей?

Как выбрать список сущностей с кастомным набором атрибутов через Criteria API, если у сущности есть связанная коллекция других сущностей? ЗдравствуйтеЕсть...

54
Почему Entity - это POJO-класс?

Почему Entity - это POJO-класс?

На википедии черном по белому написано:

75