java scanner转string,Java InputStream to String 转化
1. 概況
這篇文章主要是講怎樣將InputStream轉換為String。采用[weblink url="http://code.google.com/p/guava-libraries/"]Guava[/weblink]、[weblink url="http://commons.apache.org/proper/commons-io/"]Apache Commons IO [/weblink]以及普通Java代碼實現
2.用Guava轉換
下面就是一個Guava轉換的例子—這里用的是InputSupplier功能:
@Test
public void givenUsingGuava_whenConvertingAnInputStreamToAString_thenCorrect()
throws IOException {
String originalString = randomAlphabetic(8);
InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());
InputSupplier inputSupplier = new InputSupplier() {
@Override
public InputStream getInput() throws IOException {
return inputStream;
}
};
InputSupplier readerSupplier =
CharStreams.newReaderSupplier(inputSupplier, Charsets.UTF_8);
String text = CharStreams.toString(readerSupplier);
assertThat(text, equalTo(originalString));
}
來按步棸解釋下: 1. 首先 — 我們將 InputStream 放入 InputSupplier —這個方法非常簡單。 2. 然后 — 我們使用 InputStream 的讀取參數—這樣我們就可以獲得一個字符流。 3. 最后 — 我們使用 Guava 的 CharStreams 工具來轉化為String類型。
注意,我們最后使用了 CharStreams.toString 也會我們關閉 inputStream。
下面一個利用 Guava 轉化的方法,是沒用自動關閉 inputStream 的:
@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));
}
這里 CharStreams.toString 方法是沒用自動關閉 inputStream 的— 這就是上面為什么我們使用java7的方法處理的原因。
3. 使用 Apache commons IO 轉化
我們現在來使用用 Apache commons IO 組件來轉化 這里要說名一點,相對于 Guava 來說,其他的方法都沒有自動關閉 InputStream.
@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轉化
下面一個利用普通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);
}
5. 使用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 了
6. OVER
我們看到,InputStream to String 有很多不同的方法。我們需要做的就是在需要用到的時候選擇一個我們方便使用的。
總結
以上是生活随笔為你收集整理的java scanner转string,Java InputStream to String 转化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac怎么配置php开发环境变量,Mac
- 下一篇: android已停止三星,急,andro