为了账号安全,请及时绑定邮箱和手机立即绑定

有没有一种内存有效的方法来转换输入流编码

有没有一种内存有效的方法来转换输入流编码

largeQ 2023-07-28 15:07:01
我正在使用 http 客户端从 Google Cloud Storage 读取一个可能很大的 CSV 文件。获得 CSV 文件后,我需要将其上传到另一个存储桶,并将数据加载到 BigQuery 表中。不幸的是,我下载的文件以 UTF-16 编码,而 BigQuery 仅支持 UTF-8。我需要一种将数据从 UTF-16 转换为 UTF-8 的方法。我知道我可以简单地从 http 响应输入流中读取 UTF-16 格式的数据,然后将其以 UTF-8 格式写入新的输入流,如下所示:byte[] data = IOUtils.toByteArray(response.getEntity().getContent());String csv = new String(data, StandardCharsets.UTF_8);ByteArrayInputStream inputStream = new ByteArrayInputStream(csv.getBytes(StandardCharsets.UTF_8));但是,鉴于 CSV 文件没有最大大小并且有可能非常大,我希望尽可能避免将其读入内存。我需要这个过程的最终产品是一个InputStream,以免破坏接口的契约。我考虑过使用 BufferedReader 一次一行读取输入流并转换编码,但我不确定一旦将其转换为新的输入流是否会更有效。有没有办法以内存有效的方式从输入流中的 UTF-16 内容转换为 UTF-8 内容?
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

因为您已经使用了commons.io库。这可能正是您正在寻找的:


InputStreamReader utf16Reader = new InputStreamReader(is, StandardCharsets.UTF_16);

ReaderInputStream utf8IS = new ReaderInputStream(utf16Reader, StandardCharsets.UTF_8);

哪个 double 包装is到utf16解码读取器中,然后包装到utf8编码字节流中


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 52 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信