Итак, я пытаюсь сжать файл CSV в памяти, сохранить его как BLOB в MYSQL, а затем извлечь и распаковать его, но ZipInputStream.getEntry возвращает ноль, и я действительно не могу распаковать файл, я пытался все, и я действительно не могу найти ответ. В первый раз я сжал / распаковал файл с помощью GZIP и работал, но это изменило структуру файла CSV, поэтому я пытаюсь использовать Zip. CSV-файл получен из внешнего интерфейса с помощью Spring. MultipartFile.getBytes ().
Вот заголовок сжатого файла, видимый из БД (заголовок кажется действительным)
00000000 50 4B 03 04 14 00 08 08 08 00 B4 A0 8F 50 00 00 PK........´ .P..
Заранее спасибо !
Метод сжатия:
@Throws(Exception::class)
fun compressFile(file : ByteArray) : ByteArray {
val baos = ByteArrayOutputStream()
val zos = ZipOutputStream(baos)
val entry = ZipEntry("data.csv")
entry.size = file.size.toLong()
zos.putNextEntry(entry)
zos.write(file)
zos.closeEntry()
zos.close()
return baos.toByteArray()
}
Метод декомпрессии:
@Throws(Exception::class)
fun decompressFile(file : ByteArray): ByteArray {
if (file.isEmpty()) return file
val gis = ZipInputStream(ByteArrayInputStream(file))
val bf = BufferedReader(InputStreamReader(gis, "UTF-8"))
var outStr = ""
var line: String
while (bf.readLine().also { line = it ?: "" } != null) {
outStr += line
}
gis.close()
bf.close()
return outStr.toByteArray()
}
Объект ZipInputStream после init