Java字節流&字符流的轉換


我的需求是這樣的:

讀取JSON文件,轉化為字符串,然后在解析為POJO

我是這樣思考的:

以指定編碼以字節流方式讀取為字符流,讀取為字符串。

1.具體的類

  •     InputStreamReader 是字節流通向字符流的橋梁
    •        BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
  •     OutputStreamWriter 是字符流通向字節流的橋梁
    •       Writer out  = new BufferedWriter(new OutputStreamWriter(System.out));

 

JDA APiI的描述:

 

 

InputStreamReader 是字節流通向字符流的橋梁:它使用指定的 charset 讀取字節並將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平台默認的字符集。

每次調用 InputStreamReader 中的一個 read() 方法都會導致從底層輸入流讀取一個或多個字節。要啟用從字節到字符的有效轉換,可以提前從底層流讀取更多的字節,使其超過滿足當前讀取操作所需的字節。

為了達到最高效率,可要考慮在 BufferedReader 內包裝 InputStreamReader。例如:

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

 

 

 

 

OutputStreamWriter 是字符流通向字節流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節。它使用的字符集可以由名稱指定或顯式給定,否則將接受平台默認的字符集。

每次調用 write() 方法都會導致在給定字符(或字符集)上調用編碼轉換器。在寫入底層輸出流之前,得到的這些字節將在緩沖區中累積。可以指定此緩沖區的大小,不過,默認的緩沖區對多數用途來說已足夠大。注意,傳遞給 write() 方法的字符沒有緩沖。

為了獲得最高效率,可考慮將 OutputStreamWriter 包裝到 BufferedWriter 中,以避免頻繁調用轉換器。例如:

 Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
 

代理對 是一個字符,它由兩個 char 值序列表示: 代理項的范圍為 '\uD800' 到 '\uDBFF',后跟范圍為 '\uDC00' 到 '\uDFFF' 的 代理項。

錯誤代理元素 指的是后面不跟低代理項的高代理項,或前面沒有高代理項的低代理項。

此類總是使用字符集的默認替代序列 替代錯誤代理元素和不可映射的字符序列。如果需要更多地控制編碼過程,則應該使用 CharsetEncoder 類。 

 

/**
* @return java.lang.String
* @Author Liruilong
* @Description 文件轉字符串
* @Date 17:22 2020/3/17
* @Param [file]
**/

public static String readJsonToString(File file) {
String string = null;
if (!file.exists() || file.isDirectory()) {
System.out.println("輸入路徑不對");
} else {
try {
string = fileToBufferedReader((bufferedReader) -> {
String str = null;
StringBuilder stringBuilder = new StringBuilder();
while ((str = bufferedReader.readLine()) != null) {
stringBuilder.append(str);
}
return stringBuilder.toString();
}, file);
} catch (IOException e) {
e.printStackTrace();
}
}
return string;
}

/**
* @return java.lang.String
* @Author Liruilong
* @Description 環繞處理
* @Date 17:14 2020/3/17
* @Param [inputStreamPeocess, file]
**/

public static String fileToBufferedReader(InputStreamPeocess inputStreamPeocess, File file) throws IOException {
try (FileInputStream fileInputStream = new FileInputStream(file)) {
try (InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream)) {
try (BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
return inputStreamPeocess.peocess(bufferedReader);
}
}
}
}

 

package com.liruilong.demotext.service.utils.interfaceutils;

import java.io.BufferedReader;
import java.io.IOException;

/**
 * @Description : 函數接口,描述BufferedReader ->String的轉化方式
 * @Author: Liruilong
 * @Date: 2020/3/17 15:44
 */
@FunctionalInterface
public interface InputStreamPeocess {
    /**
     * @Author Liruilong
     * @Description 方法簽名 BufferedReader ->String
     * @Date 15:47 2020/3/17
     * @Param [inputStream]
     * @return com.liruilong.demotext.service.utils.InputStream
     **/

    String peocess(BufferedReader bufferedReader) throws IOException;
}

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM