亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有一種內存有效的方法來轉換輸入流編碼

有沒有一種內存有效的方法來轉換輸入流編碼

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 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號