CSV Fille изменяется после сжатия как байтовый массив - PullRequest
0 голосов
/ 15 апреля 2020

, поэтому я получаю файл CSV от внешнего интерфейса, и мне нужно сжать его и сохранить в MySql DB. Проблема в том, что после того, как я распаковал файл обратно, он изменился и больше не имеет структуры CSV (я сжимаю, используя ZIP, но я также пробовал gzip). Например, это файл перед сжатием

header1,header2,header3,header4,header5
val,val2,val3,val4,val5
val6,val7,val8,val9,val10

И этот файл после распаковки

header1,header2,header3,header4,header5val1,val2,val3,val4,val5val6,val7,val8.val9.val10

Мне нужно отправить распакованный файл в службу анализа временных рядов python и он не может разобрать его должным образом.

Я сжимаю / распаковываю файл напрямую как byteArray, и я уверен, что проблема заключается в сжатии, потому что я попытался сохранить и извлечь несжатый CSV, и он работает нормально. Заранее спасибо!

Вот код, используемый для сжатия

@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))
   gis.nextEntry
   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()
}

1 Ответ

1 голос
/ 15 апреля 2020

Я думаю, вы теряете свой символ NL, потому что BufferedReader.readLine () читает ТОЛЬКО строку без новой строки в конце. То есть, вы конкатенируете Line1Line2, но пропускаете новую строку между ними.

Вы не должны читать поток через bufferedreader, вам нужно прочитать ВСЁ содержимое, включая символы новой строки, см. https://www.baeldung.com/convert-input-stream-to-string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...