ZipInputSream в конце записи файла [] [] [] [] [] [] [] [] [] []…?

1

В Eclipse, когда я пытаюсь отобразить содержимое файлов из zip в конце каждого файла, это [] [] [] [] [] [] [] [] [] []. Может ли кто-нибудь объяснить это?

def uploadTheme(String themeName, def inputStream) {

    def themeNameUp = themeName.toUpperCase()
    def themeKey = this.prefix + themeNameUp

    if (redisService.exists(themeKey) && inputStream) {
        ZipInputStream zipFile = new ZipInputStream(inputStream)
        ZipEntry zipEntry = zipFile.nextEntry

        while (zipEntry) {
            def key = zipEntry.name

            if (key.startsWith(this.widgetPrefix) || key.startsWith(this.templatePrefix)) {
                byte[] data = new byte[4096]

                StringBuffer zipContent = new StringBuffer()
                int length = zipFile.read(data, 0, data.size())                                     

                while (length != -1) {
                    zipContent << new String(data)

                    length = zipFile.read(data, 0, data.size())
                }

                if (key.endsWith(":data")) {
                    def prevData = redisService.hget(themeKey, key)

                    if (prevData) {
                        historyService.addHistory(themeNameUp + ":" + key[0..-6], prevData)
                    }
                }

                redisService.hset(themeKey, key, zipContent.toString())
            }

            zipFile.closeEntry()
            zipEntry = zipFile.nextEntry
        }

        zipFile.close()
    }
  • 0
    Вы пытаетесь отобразить двоичный контент?
  • 0
    В файлах просто текст, и когда я пытаюсь сделать отображение текста, есть [] [] [] [[] [] [] [] [] [] .......
Показать ещё 6 комментариев
Теги:
zip
inputstream

1 ответ

0
Лучший ответ
zipContent << new String(data)

должно быть

zipContent << new String(data, 0, length)

поскольку длина - это число того, что действительно читается. На конце длина меньше размера данных.

Имейте в виду, что созданная строка:

  • использует кодировку платформы по умолчанию, поскольку вы не передаете дополнительный параметр для кодирования,
  • работает только для однобайтовой кодировки, поскольку вы передаете произвольную последовательность байтов разреза.
  • 0
    Большое спасибо тебе! :)

Ещё вопросы

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