精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Inputstream 轉(zhuǎn)換 String,你會(huì)了嗎?

開發(fā) 前端
我們將從使用普通的 Java 開始,包括 Java 8+ 的解決方案,然后也會(huì)研究使用 Guava 和 Apache Commons IO 庫(kù)。

大家好,我是指北君。

在本教程中,我們將講講如何將一個(gè) InputStream 轉(zhuǎn)換為一個(gè)字符串。

我們將從使用普通的 Java 開始,包括 Java 8+ 的解決方案,然后也會(huì)研究使用 Guava 和 Apache Commons IO 庫(kù)。

用 Java 進(jìn)行轉(zhuǎn)換 - StringBuilder

讓我們看看一個(gè)簡(jiǎn)單的、低級(jí)別的方法,使用普通的 Java,一個(gè) InputStream 和一個(gè)簡(jiǎn)單的 StringBuilder。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

StringBuilder textBuilder = new StringBuilder();
try (Reader reader = new BufferedReader(new InputStreamReader
(inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) {
int c = 0;
while ((c = reader.read()) != -1) {
textBuilder.append((char) c);
}
}
assertEquals(textBuilder.toString(), originalString);
}

用 Java 8 進(jìn)行轉(zhuǎn)換 -- BufferedReader

Java 8 給 BufferedReader 帶來(lái)了一個(gè)新的 lines() 方法。讓我們看看如何利用它將一個(gè) InputStream 轉(zhuǎn)換為一個(gè)字符串。

@Test
public void convertingAnInputStreamToAString() {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = new BufferedReader(
new InputStreamReader(inputStream, StandardCharsets.UTF_8))
.lines()
.collect(Collectors.joining("\n"));

assertThat(text, equalTo(originalString));
}

值得一提的是,lines() 使用的是 readLine() 方法。readLine() 假定一行是由換行("\n")、回車("\r")或回車后立即換行中的任何一種結(jié)束符。換句話說(shuō),它支持所有常見(jiàn)的行結(jié)束方式。

另一方面,當(dāng)我們使用 Collectors.join() 時(shí),我們需要明確決定我們要為創(chuàng)建的 String 使用哪種類型的結(jié)束符。

我們也可以使用 Collectors.join(System.lineSeparator()) ,在這種情況下,輸出結(jié)果取決于系統(tǒng)設(shè)置。

用 Java 9+ 進(jìn)行轉(zhuǎn)換 - InputStream.readAllBytes()

如果我們?cè)?Java 9 或以上版本,我們可以利用一個(gè)新的 readAllBytes 方法添加到 InputStream 中。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);

assertThat(text, equalTo(originalString));
}

我們需要注意的是,這段簡(jiǎn)單的代碼是為那些方便將所有字節(jié)讀入字節(jié)數(shù)組的簡(jiǎn)單情況準(zhǔn)備的。我們不應(yīng)該用它來(lái)讀取有大量數(shù)據(jù)的輸入流。

用 Java Scanner 進(jìn)行轉(zhuǎn)換

接下來(lái),讓我們看看一個(gè)使用標(biāo)準(zhǔn)文本掃描器的普通Java例子。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = null;
try (Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8.name())) {
text = scanner.useDelimiter("\\A").next();
}

assertThat(text, equalTo(originalString));
}

請(qǐng)注意,InputStream 將被關(guān)閉的 Scanner 關(guān)閉。

同樣值得澄清的是 useDelimiter("\A") 的作用。這里我們傳遞了'\A',它是一個(gè)邊界標(biāo)記重碼,表示輸入的開始。本質(zhì)上,這意味著 next() 調(diào)用讀取了整個(gè)輸入流。

使用 ByteArrayOutputStream 進(jìn)行轉(zhuǎn)換

最后,讓我們看看另一個(gè)普通的Java例子,這次是使用 ByteArrayOutputStream 類。

@Test
public void convertingAnInputStreamToString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}

buffer.flush();
byte[] byteArray = buffer.toByteArray();

String text = new String(byteArray, StandardCharsets.UTF_8);
assertThat(text, equalTo(originalString));
}

在這個(gè)例子中,InputStream 通過(guò)讀寫字節(jié)塊被轉(zhuǎn)換為 ByteArrayOutputStream。然后 OutputStream 被轉(zhuǎn)換為一個(gè)字節(jié)數(shù)組,用來(lái)創(chuàng)建一個(gè)字符串。

用java.nio進(jìn)行轉(zhuǎn)換

另一個(gè)解決方案是將 InputStream 的內(nèi)容復(fù)制到一個(gè)文件中,然后將其轉(zhuǎn)換為一個(gè)字符串。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

Path tempFile =
Files.createTempDirectory("").resolve(UUID.randomUUID().toString() + ".tmp");
Files.copy(inputStream, tempFile, StandardCopyOption.REPLACE_EXISTING);
String result = new String(Files.readAllBytes(tempFile));

assertThat(result, equalTo(originalString));
}

這里我們使用 java.nio.file.Files 類來(lái)創(chuàng)建一個(gè)臨時(shí)文件,同時(shí)將 InputStream 的內(nèi)容復(fù)制到文件中。然后用同一個(gè)類用 readAllBytes() 方法將文件內(nèi)容轉(zhuǎn)換為一個(gè)字符串。

用Guava進(jìn)行轉(zhuǎn)換

讓我們從一個(gè)利用 ByteSource 功能的 Guava 例子開始。

@Test
public void convertingAnInputStreamToAString()
throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

ByteSource byteSource = new ByteSource() {
@Override
public InputStream openStream() throws IOException {
return inputStream;
}
};

String text = byteSource.asCharSource(Charsets.UTF_8).read();

assertThat(text, equalTo(originalString));
}

讓我們來(lái)看看這些步驟:

首先,我們把我們的 InputStream 包裝成一個(gè) ByteSource.

其次,我們把 ByteSource 看作是一個(gè)具有 UTF8 字符集的 CharSource。

最后,我們使用 CharSource 將其作為一個(gè)字符串來(lái)讀取。

一個(gè)更簡(jiǎn)單的轉(zhuǎn)換方法是使用 Guava,但需要明確地關(guān)閉流, 我們可以簡(jiǎn)單地使用 try-with-resources 語(yǔ)法來(lái)處理這個(gè)問(wèn)題。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = null;
try (Reader reader = new InputStreamReader(inputStream)) {
text = CharStreams.toString(reader);
}

assertThat(text, equalTo(originalString));
}

用 Apache Commons IO 進(jìn)行轉(zhuǎn)換

現(xiàn)在讓我們來(lái)看看如何用 Commons IO 庫(kù)來(lái)做這個(gè)。

一個(gè)重要的注意事項(xiàng)是,與 Guava 不同的是,這些例子都不會(huì)關(guān)閉 InputStream。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

String text = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name());
assertThat(text, equalTo(originalString));
}

我們也可以用一個(gè)StringWriter來(lái)做轉(zhuǎn)換。

ream 轉(zhuǎn)換為一個(gè)字符串。我們從使用普通 Java 開始,然后探索了如何使用 Guava 和 Apache Commons IO 庫(kù)。

@Test
public void convertingAnInputStreamToAString() throws IOException {
String originalString = randomString(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());

StringWriter writer = new StringWriter();
String encoding = StandardCharsets.UTF_8.name();
IOUtils.copy(inputStream, writer, encoding);

assertThat(writer.toString(), equalTo(originalString));
}
責(zé)任編輯:武曉燕 來(lái)源: Java技術(shù)指北
相關(guān)推薦

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-01-02 12:05:26

Java并發(fā)編程

2022-07-08 09:27:48

CSSIFC模型

2024-08-06 09:47:57

2021-10-31 20:07:49

Windows驅(qū)動(dòng)開發(fā)

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存

2022-05-13 08:17:05

HTTPRESTful架構(gòu)

2024-07-31 08:39:45

Git命令暫存區(qū)

2023-12-12 08:02:10

2024-05-06 00:00:00

InnoDBView隔離

2022-05-06 08:26:32

JavaSPI機(jī)制

2023-01-30 09:01:54

圖表指南圖形化

2022-09-26 11:03:25

Java反射漏洞

2023-08-26 21:34:28

Spring源碼自定義

2022-07-13 08:16:49

RocketMQRPC日志

2023-03-26 22:31:29

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品毛片久久久久久久| 欧美久久视频| 欧美色男人天堂| 欧美 日韩 国产 在线观看| 亚洲精品一区二区三区四区| 小嫩嫩精品导航| 久久久精品亚洲| 91av在线免费| 国产精品色婷婷在线观看| 午夜欧美大尺度福利影院在线看 | 日韩欧美中文字幕一区二区三区| 亚洲国产色一区| 亚洲a∨一区二区三区| 国产成人手机在线| 精油按摩中文字幕久久| 91国产高清在线| 神马午夜精品91| 特黄特色欧美大片| 日韩一级二级三级精品视频| www黄色日本| bt在线麻豆视频| 久久亚洲一区二区三区四区| 亚洲aaaaaa| 最近中文字幕在线观看| 夜夜精品视频| 欧美大片欧美激情性色a∨久久| 国产123在线| 欧美大胆视频| 精品乱码亚洲一区二区不卡| 最新中文字幕2018| 成人影院入口| 天天综合天天做天天综合| 国产日产欧美一区二区| 国产主播福利在线| 91免费看`日韩一区二区| wwwxx欧美| 国产精品亚洲lv粉色| 日韩电影免费在线看| 性视频1819p久久| 久久免费公开视频| 五月天久久久| 在线性视频日韩欧美| 中文字幕5566| 亚洲精品**不卡在线播he| 欧美成人免费网站| 国产裸体视频网站| 日本成人精品| 日韩三级中文字幕| 97人人模人人爽人人澡| 99精品女人在线观看免费视频| 欧美视频一区二区三区四区| www.欧美日本| 99蜜月精品久久91| 在线免费视频一区二区| 日韩黄色片视频| 亚洲私拍视频| 欧美色播在线播放| 日本三级免费网站| 欲香欲色天天天综合和网| 姬川优奈aav一区二区| 欧美精品自拍视频| 午夜伦理福利在线| 色哟哟一区二区三区| 超碰网在线观看| 免费在线观看一区| 欧美视频精品在线| 天天久久综合网| jizz久久精品永久免费| 日韩国产中文字幕| 法国空姐电影在线观看| 日韩精品水蜜桃| 大量国产精品视频| 日本三级欧美三级| 久久精品在线| 国产一区二区丝袜| www.桃色av嫩草.com| 99视频精品免费视频| 欧美日韩亚洲一区二区三区四区| 国产日韩精品在线看| 国产精品女主播av| 特色特色大片在线| 天堂中文最新版在线中文| 欧美在线播放高清精品| 日本网站在线看| 欧美电影在线观看免费| 亚洲人成在线电影| 日韩女优一区二区| 久久福利精品| 91九色国产在线| 色窝窝无码一区二区三区| 国产日韩欧美精品一区| 老司机午夜免费福利视频| 性欧美又大又长又硬| 色婷婷国产精品久久包臀| 手机av在线免费| 精品欧美午夜寂寞影院| 日韩在线欧美在线| 激情五月色婷婷| 精品影院一区二区久久久| 国产高清一区视频| 91社区在线高清| 精品高清美女精品国产区| 超碰人人草人人| 亚洲v天堂v手机在线| 久久久精品欧美| 国产精品久久久久久人| 丁香六月久久综合狠狠色| 神马影院我不卡午夜| 77thz桃花论族在线观看| 欧美日韩久久久久久| 黄色网址在线视频| 亚洲一级毛片| 国产精品视频网| 亚洲av毛片成人精品| 伊人婷婷欧美激情| 国产精品入口免费软件| 欧美在线关看| 欧美激情在线狂野欧美精品| 国产精品爽爽久久| 国产欧美一区二区精品秋霞影院| 国产素人在线观看| 精品国产一区二区三区2021| 尤物yw午夜国产精品视频| 日本少妇性高潮| 国产精品亚洲成人| 中国人体摄影一区二区三区| 久久久一本精品| 日韩av影视在线| 中文在线观看免费网站| 国产精品18久久久久久久久| 性欧美18一19内谢| 福利一区在线| 色一区av在线| 中文字幕 欧美激情| 久久久99久久| 久久精品网站视频| 先锋影音国产精品| 日本一区二区在线播放| 欧洲成人av| 黑人狂躁日本妞一区二区三区 | 91女厕偷拍女厕偷拍高清| 男人天堂手机在线视频| 亚洲精品在线播放| 久久99视频精品| 亚洲AV无码成人片在线观看| 亚洲精品中文在线| 欧美人与性动交α欧美精品| 在线国产一区| aaa级精品久久久国产片| 1024在线播放| 精品国产乱码久久久久久久| 国产一级一片免费播放| 不卡视频一二三| 国产原创popny丨九色| 欧美日韩麻豆| 国产精品7m视频| jizz在线观看视频| 欧美精品丝袜中出| 欧美黄色免费在线观看| 国产成人av福利| 国产午夜福利在线播放| 偷拍亚洲色图| 国产精品久久久久久久9999| 一区二区三区视频网站| 91精品国产综合久久久久久久| 国产精品免费人成网站酒店| 国产成人午夜精品5599| 国产免费观看高清视频| 国产a久久精品一区二区三区| 国产精品久久久久久久久免费看| 在线播放麻豆| 日韩免费高清av| 亚洲日本韩国在线| 中文字幕精品三区| 男人添女人荫蒂国产| 亚洲在线一区| 日韩视频在线免费播放| 国产一级成人av| 国产精品久久久久久久久借妻| 黄色动漫在线观看| 亚洲精品大尺度| 中文字幕一区2区3区| 一区二区免费在线播放| 亚洲第一成人网站| 国产精品一色哟哟哟| 日韩精品一区二区三区久久| 99久久婷婷国产综合精品电影√| 97人人模人人爽视频一区二区| 三级在线看中文字幕完整版| 在线观看精品自拍私拍| 韩国av免费在线观看| 在线影院国内精品| 精品少妇久久久| 中文字幕免费不卡| 中文字幕在线永久| 免费在线看成人av| 男女视频网站在线观看| 国产精品99一区二区三| 狠狠色噜噜狠狠色综合久| 欧美系列精品| 欧美亚洲一级片| 羞羞的视频在线看| 在线色欧美三级视频| 人妻偷人精品一区二区三区| 欧美日免费三级在线| 91精品国产乱码久久久张津瑜| 中文字幕一区二区5566日韩| 日韩网站在线播放| 国产成人av一区二区| 中文字幕成人免费视频| 久久精品一区| 人妻熟妇乱又伦精品视频| 欧美 日韩 国产一区二区在线视频 | 中文字幕第99页| 天天色综合天天| 高h视频免费观看| 国产精品你懂的在线| www.久久av| 精品国产三级a在线观看| 亚洲激情视频小说| 国产成人免费av在线| 一本岛在线视频| 国产精品入口66mio| 日本a在线天堂| 我不卡影院28| 偷拍盗摄高潮叫床对白清晰| 日韩av片子| 欧美中文娱乐网| 亲子伦视频一区二区三区| 粉嫩av四季av绯色av第一区| 疯狂欧洲av久久成人av电影| 国产精品美乳一区二区免费 | 77777少妇光屁股久久一区| 午夜激情在线| 欧美成人精品h版在线观看| 拍真实国产伦偷精品| 丝袜情趣国产精品| 亚洲精品传媒| 社区色欧美激情 | 91短视频版在线观看www免费| 国产亚洲在线播放| а天堂8中文最新版在线官网| 亚洲人成在线观看| 精品乱码一区二区三四区视频| 亚洲精品ady| 人成在线免费视频| 亚洲欧洲av一区二区| 黄色av网站在线免费观看| 亚洲性生活视频| 国产高清视频免费最新在线| 在线观看欧美日韩| 色三级在线观看| 毛片精品免费在线观看| a级毛片免费观看在线| 日韩一区二区福利| а√天堂8资源在线官网| 欧美疯狂做受xxxx高潮| 成人在线黄色电影| 国产91精品久久久久久久| 桃花岛成人影院| 国产日韩欧美电影在线观看| 国产精品色婷婷在线观看| 国产a一区二区| 日日狠狠久久偷偷综合色| 免费久久一级欧美特大黄| 精品一区二区三区中文字幕老牛| 婷婷久久五月天| 欧美一区综合| 97视频在线免费| 日韩精品久久久久久| www.这里只有精品| 国产寡妇亲子伦一区二区| 日韩少妇一区二区| 久久精品欧美一区二区三区不卡| 老司机深夜福利网站| 一区二区三区四区精品在线视频| 欧美亚韩一区二区三区| 欧美亚洲愉拍一区二区| 99久久久国产精品无码免费| 亚洲护士老师的毛茸茸最新章节 | 一区二区三区高清在线观看| 韩国成人动漫在线观看| 日韩不卡一区| r级无码视频在线观看| 丝袜国产日韩另类美女| 亚洲视频在线不卡| 99精品国产99久久久久久白柏| 国产一二三av| 欧美日韩国产页| 国产乱码精品一区二区三区精东 | 成人高清免费观看mv| 欧美另类极品videosbest最新版本| 欧美办公室脚交xxxx| 成人性生交大片免费看小说| 玖玖玖免费嫩草在线影院一区| 亚洲欧美成人一区| 国产一区二区三区成人欧美日韩在线观看| 成年人在线观看视频免费| 成人手机在线视频| 三级黄色片在线观看| 激情亚洲一区二区三区四区| 99久久一区二区| 亚洲天堂色网站| 极品视频在线| 亚洲精品欧美极品| 成人在线免费小视频| 国产精品999视频| 国产精品中文有码| av在线播放中文字幕| 欧美午夜精品久久久久久人妖| 精品国自产在线观看| 中文字幕在线亚洲| 欧美办公室脚交xxxx| 北条麻妃高清一区| 91精品一区国产高清在线gif| 国产熟人av一二三区| 99精品黄色片免费大全| 久久久久久久国产精品毛片| 欧美精品日日鲁夜夜添| 国产小视频免费在线网址| 97久久伊人激情网| 在线播放一区二区精品视频| 超碰免费在线公开| 蜜桃一区二区三区在线观看| a天堂中文字幕| 色狠狠一区二区三区香蕉| 神马精品久久| 亚州欧美日韩中文视频| av综合网页| 欧美大黑帍在线播放| 国产精品影视网| 天天干中文字幕| 日韩亚洲欧美一区二区三区| 黄色免费在线观看| 91麻豆桃色免费看| 一区二区三区四区日韩| 国产亚洲视频一区| 国产精品大尺度| 国产精品无码天天爽视频| 俺也去精品视频在线观看| 日韩精品第二页| 日韩第一页在线观看| 国产在线播放一区| 少妇人妻丰满做爰xxx| 91麻豆精品国产91久久久资源速度| 91社区在线高清| 成人综合国产精品| 欧美黄色一区二区| 欧美激情一区二区三区p站| 亚洲一区av在线| 天天操天天干天天舔| 26uuu亚洲国产精品| 在线观看欧美理论a影院| 亚洲不卡视频在线| 国产精品久久影院| 国产乱子伦精品无码码专区| 欧美久久久精品| 激情小说一区| 亚洲成熟丰满熟妇高潮xxxxx| 欧美国产一区视频在线观看| 一级爱爱免费视频| 欧美巨乳美女视频| 老汉色老汉首页av亚洲| 最近免费中文字幕中文高清百度| 国产精品私人自拍| hs视频在线观看| 国产91精品久久久久久久| 日韩大片在线观看| 能看毛片的网站| 欧美视频免费在线观看| av资源种子在线观看| 亚洲综合av影视| 国产精品久久久免费| 黄色一级片一级片| 日韩欧美一二区| 欧美电影免费观看| 97超碰人人爱| 91亚洲午夜精品久久久久久| 最新中文字幕在线观看视频| 免费av在线一区| 国产成人精品999在线观看| 天美一区二区三区| 欧美午夜久久久| 亚洲色图美国十次| 欧美日韩一区二区三| 国产在线不卡一卡二卡三卡四卡| av中文在线播放| 日韩视频精品在线| 任你弄精品视频免费观看| 午夜剧场高清版免费观看| 午夜精品123| 免费高清完整在线观看| 久久久一本精品99久久精品| 精品中文字幕一区二区| 九九热在线视频播放| 插插插亚洲综合网| 欧美精品一区二区三区中文字幕| 91人人澡人人爽| 欧美日韩精品二区第二页| 亚洲第一av|