大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 編程基礎學習:Java輸入流轉字符串

編程基礎學習:Java輸入流轉字符串

更新時間:2020-07-14 16:30:43 來源:動力節點 瀏覽2389次

編程基礎學習:Java輸入流轉字符串,在本教程中,我們將介紹如何使用Guava,Apache Commons IO庫和普通Java將InputStream轉換為String。

使用Guava轉換

讓我們從一個Guava示例開始——利用ByteSource功能:

@Test
public?void?givenUsingGuava_whenConvertingAnInputStreamToAString_thenCorrect()?
?throws?IOException?{
?String?originalString?=?randomAlphabetic(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));
}

我們來看看這些步驟:

首先-我們將InputStream包裝為ByteSource——據我所知,這是最簡單的方法

然后-我們將ByteSource視為具有UTF8字符集的CharSource。

最后-我們使用CharSource將其作為String讀取。

使用zuava進行轉換的一種更簡單的方法,但需要明確關閉流;幸運的是,我們可以簡單地使用try-with-resources語法來處理這個問題:

@Test
public?void?givenUsingGuavaAndJava7_whenConvertingAnInputStreamToAString_thenCorrect()?
?throws?IOException?{
?String?originalString?=?randomAlphabetic(8);
?InputStream?inputStream?=?new?ByteArrayInputStream(originalString.getBytes());
?
?String?text?=?null;
?try?(final?Reader?reader?=?new?InputStreamReader(inputStream))?{
?text?=?CharStreams.toString(reader);
?}
?
?assertThat(text,?equalTo(originalString));
}

使用Apache Commons IO進行轉換

現在讓我們看看如何使用Commons IO庫執行此操作。

這里有一個重要的警告——與Guava相反,這些例子都不會關閉InputStream——這就是我個人更喜歡Guava解決方案的原因。

@Test
public?void?givenUsingCommonsIo_whenConvertingAnInputStreamToAString_thenCorrect()
throws?IOException?{
String?originalString?=?randomAlphabetic(8);
InputStream?inputStream?=?new?ByteArrayInputStream(originalString.getBytes());
String?text?=?IOUtils.toString(inputStream,?StandardCharsets.UTF_8.name());
assertThat(text,?equalTo(originalString));
}

我們也可以使用StringWriter進行轉換:

@Test
public?void?givenUsingCommonsIoWithCopy_whenConvertingAnInputStreamToAString_thenCorrect()?
?throws?IOException?{
?String?originalString?=?randomAlphabetic(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));
}

使用Java轉換——InputStream

現在讓我們看一下使用普通Java的低級方法-一個InputStream和一個簡單的StringBuilder:

@Test
public?void?givenUsingJava5_whenConvertingAnInputStreamToAString_thenCorrect()?
?throws?IOException?{
?String?originalString?=?randomAlphabetic(DEFAULT_SIZE);
?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和Scanner進行轉換

接下來,讓我們看一個簡單的Java示例-使用標準文本Scanner:

@Test
public?void?givenUsingJava7_whenConvertingAnInputStreamToAString_thenCorrect()
throws?IOException?{
String?originalString?=?randomAlphabetic(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));
}

請注意,關閉Scanner將關閉InputStream。

這是使用Java 7示例的唯一原因(而不是Java 5示例)是使用try-with-resources語句 - 將其轉換為標準的try-finally塊,使用Java 5進行編譯。

使用ByteArrayOutputStream進行轉換

最后,讓我們看一下另一個普通的Java示例,這次使用ByteArrayOutputStream類:

@Test
public?final?void?givenUsingPlainJava_whenConvertingAnInputStreamToString_thenCorrect()
throws?IOException?{
String?originalString?=?randomAlphabetic(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));
}

在此示例中,首先通過讀取和寫入字節塊將InputStream轉換為ByteArrayOutputStream,然后將OutputStream轉換為字節數組,用于創建String。

使用java.nio進行轉換

另一種解決方案是將InputStream的內容復制到文件,然后將其轉換為String:

@Test
public?final?void?givenUsingTempFile_whenConvertingAnInputStreamToAString_thenCorrect()
throws?IOException?{
String?originalString?=?randomAlphabetic(DEFAULT_SIZE);
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類來創建臨時文件,以及將InputStream的內容復制到文件中。然后,使用相同的類將文件內容轉換為使用readAllBytes()方法的String。

編程基礎學習:Java輸入流轉字符串

以上就是動力節點java培訓機構的小編針對“編程基礎學習:Java輸入流轉字符串”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲性爰视频 | 日日天天干 | 狠狠色噜噜狠狠狠狠色综合网 | 久久这里只精品热免费99 | 亚洲精品成人一区二区 | 亚洲欧美色综合精品 | 中文字幕久久亚洲一区 | 特级毛片a级毛免费播放 | 国产毛片久久久久久国产毛片 | 99久9在线视频 | 久久久网久久久久合久久久久 | 99j久久精品久久久久久 | 亚洲综合国产精品 | 久久国产美女免费观看精品 | 亚洲酷色综合 | 色综合网站在线 | 国产午夜永久福利视频在线观看 | 99精品国产兔费观看久久99 | 大陆一级毛片免费视频观看i | 我我色综合 | 久草国产在线观看 | 男女超爽视频免费播放在线观看 | 狠狠干奇米 | 久久成人国产 | 亚洲综合图片小说区热久久 | 天天骑夜夜操 | 久久老色鬼天天综合网观看 | 日本高清视频一区二区 | 色婷婷精品大全在线视频 | 手机看片福利盒子久久 | 免费午夜剧场 | 一级女人毛片 | 国产成人久久久精品一区二区三区 | 亚洲另类视频在线观看 | 欧美日韩精品一区二区三区 | 免费看黄片毛片 | 久久久久99精品成人片三人毛片 | 一区二区伦理 | 久久精品午夜视频 | 日本在线一卡二卡毛片 | 99在线播放视频 |