JAVA学习笔记-----IO流
来源:互联网 发布:风管套料软件 编辑:程序博客网 时间:2024/06/16 11:14
处理流类型
缓冲流
四种缓冲流常用的构造方法:
- 缓冲输入流支持其父类的mark和reset方法;
- BufferedReader提供了readLine方法用于读取一行字符串(以\r或\n分隔);
- BufferedWriter提供了newLine用于写入一个行分隔符;
- 对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。
转换流
- InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换。
- InputStreamReader需要和InputStream”套接”。
- OutputSreamWriter需要和OutputStream”套接”。
- 转换流在构造时可以指定其编码集合,例如:
InputStream isr=new InoutStreamReader(System.in,"ISO-8859-1")
数据流
DataInputStream和DataOutputStream直接把基础类型(比如long,float)存到内存(文件)中。
- DataInputStream和DataOutputStream分别继承自InputStrean和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。
- DataInputStream和DataOutputStream提供了可以存取与机器无关的JAVA原始类型数据(如:int,double等)的方法。
- DataInputStream和DataOutputStream的构造方法为:
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
举例如下:
ByteArrayOutputStream baos = new ByteArrayOutputStream();// 分配一个字节数组内存,baos是通往内存的ByteArray的输出流 DataOutputStream dos = new DataOutputStream(baos);// 包一个DataOutput的流 try { dos.writeDouble(1.1111); // 直接写基础类型数据,占8个字节 dos.writeBoolean(true); // 直接写基础类型数据,占1个字节 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());// 通往内存的ByteArray的输入流 System.out.println(bais.available());// 9个字节 DataInputStream dis = new DataInputStream(bais);// 包一个DataInput的流 System.out.println(dis.readDouble()); //先写的先读,要按顺序 System.out.println(dis.readBoolean()); dos.close(); dis.close(); } catch (Exception e) { e.printStackTrace(); }
Print流
- PrintWriter和PrintStream都属于输出流,分别针对于字符和字节。
- PrintWriter和PrintStream提供了重载的print
- Println方法用于多种数据类型的输出。
- PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态检测错误信息。
- PrintWriter和PrintStream有自动flush功能。
/*测试PrintStream*/ public static void main(String[] args) { PrintStream ps = null; try { FileOutputStream fos = new FileOutputStream("G:\\workplace\\learning-java\\src\\shen\\l8\\des.txt");// 指向文件的流 ps = new PrintStream(fos);//流上包一个PrintStream } catch (Exception e) { e.printStackTrace(); } if (ps != null) { System.setOut(ps); // 默认指向System.out,现更改为指向ps流 } int ln = 0; for (char c = 0; c <= 600; c++) { System.out.print(c + " "); if (ln++ >= 100) { System.out.println(); ln = 0; } } }
Object流
- transient关键字:不序列化
- serializable接口:类必须实现该接口才能序列化
- externalizable接口:外部化,需要重写readExternal(in)和writeExternal(out)方法,相当于自己实现序列化
总结
- InputStream/OutputSream:基础抽象类
- Reader/Writer:基础抽象类
- FileInoutStream/FileOutputStream:文件读写字节流
- FileReader/FileWriter:文件读写字符流
- BufferedInputStream/BufferedOutputStream:带缓冲区的字节流
- BufferedReader/BufferedWriter:带缓冲区的字符流
- ByteArrayInputStream/ByteArrayOutputStream:内存里面的字节数组进行读写
- InputStreamReader/OutputStreamWriter:转换流,字节转换成字符(没有字符转换成字节)
- DataInutStream/DataOutputStream:直接读写基础类型数据或者UTF-8数据
- PrintStream/PrintWriter:输出流(没有in)
- ObjectInputStream/ObjectOutputStream:直接读写对象。transient使某变量不序列化、serializable是必须实现的接口、externalizable接口自己控制序列化。
阅读全文
0 0
- java学习笔记--IO流
- Java IO流学习笔记
- java IO流学习笔记
- Java IO流 学习笔记
- java学习笔记-IO流
- Java学习笔记:IO流
- Java学习笔记-IO流
- Java IO流学习笔记
- Java学习笔记 IO流
- JAVA学习笔记-----IO流
- Java学习笔记---IO流笔记
- Java IO学习笔记
- Java IO学习笔记
- java IO学习笔记
- Java IO学习笔记
- Java IO学习笔记
- Java IO学习笔记
- JAVA IO学习笔记
- CentOS7下解决yum install mysql-server 异常:No package mysql-server available.问题
- h5新特性localstorage的简单应用(记住登录名和密码)
- 缩略图信息提取工具vinetto
- 推荐系统概述
- 客观题笔记
- JAVA学习笔记-----IO流
- jmeter解决中文乱码问题
- python 对一个函数应用多个装饰器
- input="file" 浏览时只显示指定excel文件,筛选特定文件类型
- CentOS 7.2 tomcat启动慢3种解决办法
- 洞悉 Java 应用性能瓶颈的利器:Visual Performance Analyzer
- MacBook 電池壽命加倍延長超攻略:目標 2000 次電池循環
- 说说Spring MVC的工作原理、流程
- Java RMI 框架(远程方法调用)