StatefulBeanToCsv 不会将完整字段写入 CSV,

StatefulBeanToCsv doesn't write complete fields to CSV,

我正在使用 Opencsv v5.3,我正在以 CSV 格式将 InputStream 编码为 OutputStream。在该场景中,InputStream 包含 24051 条记录,而它使用第 24038 条 corrupted/incomplete 记录写入 24037 条正确记录。 你能帮忙吗?

下面是我的代码:

private static void doCsvEncoding(Socket clientSocket, InputStream inputStream, OutputStream outputStream) {

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        try {
            byte[] byteChunk = new byte[131072];
            try {
                int readBytes = inputStream.read(byteChunk);
                int total = 0;
                while (readBytes != -1) {
                    total += readBytes;
                    byteArrayOutputStream.write(byteChunk, 0, readBytes);
                    readBytes = inputStream.read(byteChunk);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                clientSocket.shutdownInput();
            }

            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
            ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
            int cnt = 0;
            ByteArrayOutputStream mediatorOutputStream = new ByteArrayOutputStream();

            StatefulBeanToCsv<T> statefulBeanToCsv =
                    new StatefulBeanToCsvBuilder<T>(new OutputStreamWriter(mediatorOutputStream))
                            .withIgnoreField(T.class, T.class.getField("tag"))
                            .withIgnoreField(T.class, T.class.getDeclaredField("code")).build();

            try {
                while (true) {
                    T t = (T)objectInputStream.readObject();
                    statefulBeanToCsv.write(t);
                    cnt ++;
                }
            } catch (IOException | NullPointerException e) {
                e.printStackTrace();
            } catch (CsvRequiredFieldEmptyException e) {
                e.printStackTrace();
            } catch (CsvDataTypeMismatchException e) {
                e.printStackTrace();
            }
            outputStream.write(("" + cnt + " ").getBytes());
            System.out.println(cnt);
            mediatorOutputStream.close();
            ByteArrayInputStream mediatorInputStream = new ByteArrayInputStream(mediatorOutputStream.toByteArray());

            try {
                int readBytes = mediatorInputStream.read(byteChunk);
                while (readBytes != -1) {
                    outputStream.write(byteChunk, 0, readBytes);
                    readBytes = mediatorInputStream.read(byteChunk);
                }
                clientSocket.shutdownOutput();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch(IOException | ClassNotFoundException | NoSuchFieldException e) {
            e.printStackTrace();
        }
    }

不使用 StatefulBeanToCsvBuilder,而是使用 CSVWiter 并添加 header 到 Java Reflection