-
Notifications
You must be signed in to change notification settings - Fork 547
Closed
Labels
Milestone
Description
问题描述
我们使用 Fastjson2 用于生成 CSV 格式的数据文件。
写入少量数据时,一切表现正常。
然而,当写入超过 65536 个字节的数据时,就会触发如下数组越界异常 。
java.lang.ArrayIndexOutOfBoundsException: Index 65536 out of bounds for length 65536
at com.alibaba.fastjson2.support.csv.CSVWriterUTF8.writeComma(CSVWriterUTF8.java:52)
at com.alibaba.fastjson2.support.csv.CSVWriter.writeLine(CSVWriter.java:149)
通过异常堆栈信息得知报错代码位置如下:
fastjson2/core/src/main/java/com/alibaba/fastjson2/support/csv/CSVWriterUTF8.java
Lines 48 to 53 in a122b8d
| public void writeComma() { | |
| if (off + 1 == bytes.length) { | |
| flush(); | |
| } | |
| bytes[off++] = ','; | |
| } |
如果之前 CSVWriterUTF8.off 已经是 65536,本次再调用 writeComma()方法时,由于 bytes.length 固定是 65536,并不满足 if( off + 1 == bytes.length ) 的 if 条件,因此触发越界异常。
此外,我们恰好在该数据量边界写入的是字符串,也得到了一个类似的异常:
java.lang.StringIndexOutOfBoundsException: offset 65532, count 5, length 65536
at java.base/java.lang.String.checkBoundsOffCount(String.java:4591)
at java.base/java.lang.String.getBytes(String.java:1734)
环境信息
请填写以下信息:
- OS信息: CentOS 8.2
- JDK信息: Openjdk 17
- 版本信息:Fastjson2 2.0.52
期待的正确结果
正常写入,不再报错。