Java学习提要——IO操作的内存流
来源:互联网 发布:打击垫 编程 编辑:程序博客网 时间:2024/04/29 19:55
有一个应用需要进行IO操作,可是又不想产生文件。我们就可以使用内存来进行输入与输出的操作——使用内存流的场景
java.io包里提供两组操作:
字节内存流:ByteArrayInputStream、ByteAttayOutputStream
字符内存流:CharArrayReader、CharArrayWriter
本文主要以字节内存流操作为例子,两个操作其实没什么区别
-java.io.InputStream
–java.io.ByteArrayInputStream java.lang.Object
-java.io.OutputStream
–java.io.ByteArrayOutputStream 构造方法 public ByteArrayInputStream(byte[] buf)
表示将要操作的数据设置到输入流 public ByteArrayOutputStream()
从内存输出数据
做一个简单的比较:
文件操作为例:
输出(OutputStream):程序 -> OutputStream -> 文件
输入(InputStream):程序 <- InputStream <- 文件
内存操作为例:
输出(InputStream):程序 -> InputStream -> 内存
输入(OutputStream):程序 <- OutputStream <- 内存
例:小写字母转大写字母
!避免不必要的字符被转换,使用Character
-public static char toLowerCase(char ch)
-public static int toLowerCase(int codePoint)
-public static char toUpperCase(char ch)
-public static int toUpperCase(int codePoint)
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.OutputStream;public class Nice { public static void main(String [] args) throws Exception{ String str = "Hello%World^*!" ; //要求转换的字符串 //本次将通过内存操作流实现转换,先将数据存在内存流里,再从里面取出每一个数据 //将所有要读取的数据设置到内存输入流之中,本次利用向上转型 InputStream input = new ByteArrayInputStream(str.getBytes()); //为了能够将所有的内存流数据取出,使用ByteArrayOutputStream OutputStream output = new ByteArrayOutputStream(); int temp = 0; //读取每一个字节数据 //经过此次循环之后,所有的数据都将保存再内存输出流对象之中 while((temp = input.read()) != -1) { //每一次读取一个数据 output.write(Character.toUpperCase(temp)); //字节输出流 } System.out.println(output); //调用toString()方法 input.close(); output.close(); }}
注意!在ByteArrayOutputStream类里面有一个重要的方法:public byte[] toByteArray()
这个方法可以将所有保存在内存中的字节数据变为字节数组存在
//利用ByteArrayOutputStream,可以实现多个文件的同时读取//实现文件的合并读取,(假设已经创建两个文件infoa,infob)import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;public class Nice { public static void main(String[] args) throws Exception{ File fileA = new File("文件路径"); File fileB = new File("文件路径"); InputStream inputA = new FileInputStream(fileA); InputStream inputB = new FileInputStream(fileB); ByteArrayOutputStream output = new ByteArrayOutputStream(); int temp = 0; //每次读取一个字节 while((temp = inputA.read()) != -1) { output.write(temp); } while((temp = inputB.read()) != -1) { output.write(temp); } //现在所有的内容都保存再内存输出流里面,所有的内容变为字节数组取出 byte data [] = output.toByteArray(); output.close(); inputA.close(); inputB.close(); System.out.println(new String(data)); }}
- Java学习提要——IO操作的内存流
- Java学习提要——File类的基本操作
- Java学习提要——字符流与字节流的基本操作与区别
- Java学习提要——认识'泛型'与其常见操作
- Java学习提要——输入流与输出流基本操作
- Java学习提要——String的基本方法
- Java学习提要——抽象类的使用限制
- Java学习提要——'接口'的基础示例
- Java学习提要——异常的基本概念
- Java学习提要——打印流基础
- Java学习提要——缓冲输入流
- Java学习提要——字符串连接
- Java学习提要——方法引用
- Java学习提要——接口进阶
- Java学习提要——Callable接口
- Java学习提要——Comparable接口
- Java学习提要——File类常见操作与目录操作
- Java学习提要——方法"反射"基本操作与"绕过泛型"实验
- MobiCom 2016 --- 20161004 in New York, USA
- 382 linked list random node (待解决)
- P1908 逆序对
- 文献阅读(5)
- 微信小程序实战之天气预报
- Java学习提要——IO操作的内存流
- 测试的道理
- 十年磨一剑,我来露露脸!
- 极简的C#很优雅——《C#实战开发:核心技术应用与实践》
- matlab去掉指定列,以及合并去掉重复的列,日期变化
- ROS入门之主题和服务、msg和srv(C++)
- canvas画板/写字板
- canvasX小球
- UVA 10795 A Different Task 汉诺塔加强版 *