我正在使用 http 客戶端從 Google Cloud Storage 讀取一個(gè)可能很大的 CSV 文件。獲得 CSV 文件后,我需要將其上傳到另一個(gè)存儲(chǔ)桶,并將數(shù)據(jù)加載到 BigQuery 表中。不幸的是,我下載的文件以 UTF-16 編碼,而 BigQuery 僅支持 UTF-8。我需要一種將數(shù)據(jù)從 UTF-16 轉(zhuǎn)換為 UTF-8 的方法。我知道我可以簡(jiǎn)單地從 http 響應(yīng)輸入流中讀取 UTF-16 格式的數(shù)據(jù),然后將其以 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 文件沒有最大大小并且有可能非常大,我希望盡可能避免將其讀入內(nèi)存。我需要這個(gè)過程的最終產(chǎn)品是一個(gè)InputStream,以免破壞接口的契約。我考慮過使用 BufferedReader 一次一行讀取輸入流并轉(zhuǎn)換編碼,但我不確定一旦將其轉(zhuǎn)換為新的輸入流是否會(huì)更有效。有沒有辦法以內(nèi)存有效的方式從輸入流中的 UTF-16 內(nèi)容轉(zhuǎn)換為 UTF-8 內(nèi)容?
1 回答

慕虎7371278
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
因?yàn)槟呀?jīng)使用了commons.io庫。這可能正是您正在尋找的:
InputStreamReader utf16Reader = new InputStreamReader(is, StandardCharsets.UTF_16);
ReaderInputStream utf8IS = new ReaderInputStream(utf16Reader, StandardCharsets.UTF_8);
哪個(gè) double 包裝is到utf16解碼讀取器中,然后包裝到utf8編碼字節(jié)流中
添加回答
舉報(bào)
0/150
提交
取消