gpt4 book ai didi

java - 从对象列表生成 CSV

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:37 25 4
gpt4 key购买 nike

我正在尝试根据 hibernate 查询的结果生成 CSV,它最多可以包含 200k 行,创建后 CSV 可能约为 30MB。

我正在努力让性能接近可接受的程度。目前我的 hibernate 查询将返回一个对象列表。然后我使用 StringBuilder 生成 CSV 字符串。然后我从中获取一个字节数组,并将该字节数组传递给response.outputstream.write()方法。

我应该怎么做才能有效地生成这种大小的 CSV?

我的服务

List<Object> objectList = hibernateDao.getObjectList(objectList);

StringBuilder sb = new StringBuilder();
sb.append("field1_id,field2,field3,field14");
for(Object object : objectList){
sb.append("\n");
sb.append(object.field1());
sb.append(",");
sb.append(object.field2());
sb.append(",");
sb.append(object.field3());
...
...
sb.append(",");
sb.append(object.field14);
}
byte[] bytes = sb.toString().getBytes();
return bytes;

我的 Controller 将获取结果字节[]

response.setHeader("Content-Type", "text/comma-separated-values");
response.getOutputStream().write(objectService.getListByteArray());

最佳答案

问题最初似乎出在您的 StringBuilder 扩展上,您可以将其初始化以分配大量字符,但随后您尝试写入的内容的长度可能会超过 Integer.MAX_VALUE(char[] 的最大长度),并且您将收到缓冲区溢出错误。

在您单独编写的值中还存在转义逗号和引号字符的潜在问题。这很难处理,我建议您使用 CSV 库来确保获得正确的输出。

尝试uniVocity-parsers持久化你的对象。您可以使用一些注释将特定字段序列化为 CSV。

免责声明:我是这个库的作者,它是开源且免费的(Apache 2.0 许可证)

关于java - 从对象列表生成 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36162979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com