2 Java IO:InputStream 和 OutputStream
来源:互联网 发布:fastjson解析json数据 编辑:程序博客网 时间:2024/05/18 00:29
1 java.io.InputStream
InputStream 是所有字节输入流的基类,用于读取基于字节的数据。
InputStream 是 abstract
类,不能实例化。
常用方法有:
(1) int available()
返回一个预估的可以从输入流中读取的字节数。
测试:准备 2 个 .txt
文件,一个存放英文字符,一个存放中文字符
【test.txt】内容
Good news!
【测试.txt】内容
好消息!
单元测试:
@Testpublic void test() throws IOException { try (InputStream inputStream = new FileInputStream("D:/test.txt")) { System.out.println(inputStream.available()); } try (InputStream inputStream = new FileInputStream("D:/测试.txt")) { System.out.println(inputStream.available()); }}
测试结果:
1012
【test.txt】中加上空格一共 10 个英文字符,每个字符占一个字节,所以预估的可读取字节数为 10。
【测试.txt】中共有 4 个中文字符,因为文件编码是 UTF-8,所以预估的可读取字节数为 12(4*3),参看 常见编码占用字节数
(2) void close()
关闭输入流并释放与此输入流关联的系统资源。
(3) abstract int read()
从输入流中读取一个字节的数据,返回值是一个介于 0 至 255 间的整形数值。
单元测试:
@Testpublic void test() throws IOException { try (InputStream inputStream = new FileInputStream("D:/test.txt")) { int data = inputStream.read(); while (data != -1) { String binary = Integer.toBinaryString(data); if (binary.length() < 8) { int size = 8 - binary.length(); StringBuilder prefix = new StringBuilder(); for (int i = 0; i < size; i++) { prefix.append("0"); } binary = prefix + binary; } System.out.print("二进制:" + binary); System.out.print(" "); System.out.print("十进制:" + data); System.out.print(" "); System.out.print("字符:" + (char) data); System.out.println(); data = inputStream.read(); } }}
测试结果:
二进制:01000111 十进制:71 字符:G二进制:01101111 十进制:111 字符:o二进制:01101111 十进制:111 字符:o二进制:01100100 十进制:100 字符:d二进制:00100000 十进制:32 字符: 二进制:01101110 十进制:110 字符:n二进制:01100101 十进制:101 字符:e二进制:01110111 十进制:119 字符:w二进制:01110011 十进制:115 字符:s二进制:00100001 十进制:33 字符:!
(4) int read(byte[] b)
尝试从输入流中读取与参数字节数组容量一致的字节数,并将此读取内容存入缓存数组(b),返回值为实际读取的字节数。
单元测试:
@Testpublic void test() throws IOException { try (InputStream inputStream = new FileInputStream("D:/test.txt")) { byte[] buf = new byte[5]; int data = inputStream.read(buf); while (data != -1) { System.out.println(new String(buf)); data = inputStream.read(buf); } }}
测试结果:
Good news!
可以看出一共只读取了 2 次就读取完了所有输入流中的内容,一次性读取一个字节数组的方式比一次性读取一个字节的方式快。
(5) int read(byte[] b, int off, int len)
尝试从输入流中指定的位置(off)开始读取指定长度(len)的字节数,并将读取内容存入缓存数组(b),返回值为实际读取的字节数。
2 java.io.OutputStream
OutputStream 是所有字节输出流的基类,是 abstract
类,不能实例化。
常用方法有:
(1) void close()
关闭输出流并释放与此输出流关联的系统资源。
(2) void flush()
刷新此输出流并强制将缓存的输出字节写入目标媒介。
单元测试:
@Testpublic void test() throws IOException { String[] content = new String[] {"Msg", " ", "received", "!"}; try (OutputStream outputStream = new FileOutputStream("D:/test.txt")) { for (String item : content) { outputStream.write(item.getBytes()); outputStream.flush(); System.out.println(1 / 0); } }}
测试结果:
运行测试过程中输入流成功写入一次后便异常终止,运行测试后生成【test.txt】文件,内容如下:
Msg
(3) void write(byte[] b)
将指定的字节数组中所有数据写入到输出流。
单元测试:
@Testpublic void test() throws IOException { String[] content = new String[] {"Msg", " ", "received", "!"}; try (OutputStream outputStream = new FileOutputStream("D:/test.txt")) { for (String item : content) { outputStream.write(item.getBytes()); } }}
测试结果:
之前D盘中无【test.txt】文件,运行测试后生成此文件且内容如下:
Msg received!
(4) void write(byte[] b, int off, int len)
将字节数据中从 off
位置开始,len
个字节的数据写入到输出流。
(5) abstract void write(int b)
将指定的字节写入此输出流。
- JAVA IO-2 InputStream和OutputStream
- 2 Java IO:InputStream 和 OutputStream
- Java.IO.InputStream-OutputStream
- Java IO - InputStream&OutputStream
- Java IO 字节流 InputStream和OutputStream
- java IO之OutputStream和InputStream
- Java知识(IO流、.InputStream和OutputStream)
- Java IO流-InputStream和OutputStream
- java.io.InputStream.read和java.io.OutputStream.write
- java InputStream 和 OutputStream
- Java InputStream 和OutputStream
- Java IO流操作汇总: inputStream 和 outputStream
- JDK 1.7 java.io 源码学习之InputStream和OutputStream
- Java IO 系列源码分析——InputStream和OutputStream
- Java基础--------(6)IO流InputStream和OutputStream
- Java IO ---学习笔记(InputStream 和 OutputStream)
- Java--IO流之字节流介绍--InputStream和OutputStream
- Java IO流操作汇总: inputStream 和 outputStream
- ECLIPSE下JAVA 项目配置动态WEB项目失败的解决
- Codeforces Round #439 (Div. 2)E详解
- 《SSO系列一》初识SSO
- 学习阿里巴巴开发手册-11
- Android 隐藏APP图标
- 2 Java IO:InputStream 和 OutputStream
- 乐视IPO的证监会内鬼遭调查,令完成幕后操纵丑闻曝光
- 总结1
- 改善java程序的151个建议
- mysql windows 系统服务
- 关于job的应用(quartz中时间表达式的设置)
- canvas练手素材
- Mpi4py实践
- 通过轮廓点对负极点的y值进行调整