1、概述java
StreamUtils是spring中用于处理流的类,是java.io包中inputStream和outputStream,不是java8中Steam。使用时仅依赖spring-corespring
2、使用数组
基本的输入流读取成字符串spa
public static String getStringFromInputStream(InputStream input) throws IOException { StringWriter writer = new StringWriter(); IOUtils.copy(input, writer, "UTF-8"); return writer.toString(); }
2.一、拷贝inputStream内容至outputStream:StreamUtils.copy(in, out);code
两个参数,第一个为输入,第二个为拷贝至的blog
@Test public void whenCopyInputStreamToOutputStream_thenCorrect() throws IOException { String inputFileName = "src/test/resources/input.txt"; String outputFileName = "src/test/resources/output.txt"; File outputFile = new File(outputFileName); InputStream in = new FileInputStream(inputFileName); OutputStream out = new FileOutputStream(outputFile); StreamUtils.copy(in, out); assertTrue(outputFile.exists()); String inputFileContent = getStringFromInputStream(new FileInputStream(inputFileName)); String outputFileContent = getStringFromInputStream(new FileInputStream(outputFileName)); assertEquals(inputFileContent, outputFileContent); }
2.二、拷贝inputStream部份内容至outputStream,使用copyRange()方法拷贝必定范围的内容:字符串
copyRange方法有四个参数,inputStream,outputStream,开始拷贝位置,结束拷贝位置。若是咱们指定的长度超过inputStream的长度呢?copyRange方法仅拷贝至流的结尾。get
@Test public void whenCopyRangeOfInputStreamToOutputStream_thenCorrect() throws IOException { String inputFileName = "src/test/resources/input.txt"; String outputFileName = "src/test/resources/output.txt"; File outputFile = new File(outputFileName); InputStream in = new FileInputStream(inputFileName); OutputStream out = new FileOutputStream(outputFileName); StreamUtils.copyRange(in, out, 1, 10); assertTrue(outputFile.exists()); String inputFileContent = getStringFromInputStream(new FileInputStream(inputFileName)); String outputFileContent = getStringFromInputStream(new FileInputStream(outputFileName)); assertEquals(inputFileContent.substring(1, 11), outputFileContent); }
2.三、拷贝字符串至outputStreaminput
copy方法带三个参数:被拷贝的字符串,写文件时指定的字符集,指定目的地(outputStream)string
@Test public void whenCopyStringToOutputStream_thenCorrect() throws IOException { String string = "Should be copied to OutputStream."; String outputFileName = "src/test/resources/output2.txt"; File outputFile = new File(outputFileName); OutputStream out = new FileOutputStream(outputFileName); StreamUtils.copy(string, StandardCharsets.UTF_8, out); assertTrue(outputFile.exists()); String outputFileContent = getStringFromInputStream(new FileInputStream(outputFileName)); assertEquals(outputFileContent, string); }
2.四、将inputStream内容拷贝为字符串
@Test public void whenCopyInputStreamToString_thenCorrect() throws IOException { String inputFileName = "src/test/resources/input.txt"; InputStream is = new FileInputStream(inputFileName); String content = StreamUtils.copyToString(is, StandardCharsets.UTF_8); String inputFileContent = getStringFromInputStream(new FileInputStream(inputFileName)); System.out.println(content); assertEquals(inputFileContent, content); }
2.五、拷贝inputStream内容至字节数组
@Test public void whenCopyInputStreamToByteArray_thenCorrect() throws IOException { String inputFileName = "src/test/resources/input.txt"; InputStream is = new FileInputStream(inputFileName); byte[] out = StreamUtils.copyToByteArray(is); String content = new String(out); String inputFileContent = getStringFromInputStream(new FileInputStream(inputFileName)); assertEquals(inputFileContent, content); }
2.六、删除流中全部剩余数据
StreamUtils.drain(in);
2.七、得到一个有效空输入流
public InputStream getInputStream() { return StreamUtils.emptyInput(); }
2.八、两个重载方法nonClosing(),inputStream和outputStream流能够做为参数,用于返回无需关闭的inputStream和outputStream流
public InputStream getNonClosingInputStream() throws IOException { InputStream in = new FileInputStream("src/test/resources/input.txt"); return StreamUtils.nonClosing(in); }