CSV 文件在压缩后被更改为字节数组
CSV Fille is altered after compression as byte array
所以我从前端收到一个 CSV 文件,我需要压缩它并将其存储到 MySql 数据库中。问题是,在我解压缩文件后,它被更改并且不再具有 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时间序列分析服务,它无法正确解析。
我 compress/decompress 文件直接作为 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()
}
我想,你丢失了 NL 字符,因为 BufferedReader.readLine() 只读取了最后一行没有新行的行。也就是说,您连接了 Line1Line2,但跳过了它们之间的新行。
您不应该通过 bufferedreader 读取流,您需要读取整个内容,包括换行符,请参阅
https://www.baeldung.com/convert-input-stream-to-string
所以我从前端收到一个 CSV 文件,我需要压缩它并将其存储到 MySql 数据库中。问题是,在我解压缩文件后,它被更改并且不再具有 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时间序列分析服务,它无法正确解析。
我 compress/decompress 文件直接作为 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()
}
我想,你丢失了 NL 字符,因为 BufferedReader.readLine() 只读取了最后一行没有新行的行。也就是说,您连接了 Line1Line2,但跳过了它们之间的新行。
您不应该通过 bufferedreader 读取流,您需要读取整个内容,包括换行符,请参阅 https://www.baeldung.com/convert-input-stream-to-string