java基础之 IO 流(InputStream/OutputStream)
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础之 IO 流(InputStream/OutputStream)相关的知识,希望对你有一定的参考价值。
基流
上图中有句话写错了,应该是 字节流的根类。
文件输出/入字节流
代码示例
心得:
- 读写文件流 关心 读的时候读多少,写的时候写多少,它没有限制一次只能读/写多少。
- 文件流的创建 到 文件流的关闭 为一个周期。
package IOTest;
import java.io.*;
/**
* ClassName: RandomAccessFileTets <br/>
* Description: <br/>
* date: 2021/8/2 19:47<br/>
*
* @author yiqi<br />
* @since JDK 1.8
*/
public class RandomAccessFileTets {
public static void main(String[] args) throws Exception {
//第一步:创建一个文件输入流
FileInputStream fis = new FileInputStream("src/IOTest/test.txt");
//第二步:创建一个文件输出流
FileOutputStream fos = new FileOutputStream("src/IOTest/clone.txt",true);
//第四步:规定一次性读取数据长度
byte[] buffer = new byte[1024];
while (true){
//第三步:读取数据
int len = fis.read(buffer);
if (len == -1){
break;
}
fos.write(buffer,0,len);
}
//关闭流
fis.close();
fos.close();
}
}
ByteArray字节流
代码示例:
心得:
- ByteArrayInputStream 主要作用是与内存数据互动,如果要与介质(如文件,网络,控制台)互动,还是得创建 文件流 (FileXXXStream)的
package IOTest;
import java.io.*;
/**
* ClassName: RandomAccessFileTets <br/>
* Description: <br/>
* date: 2021/8/2 19:47<br/>
*
* @author yiqi<br />
* @since JDK 1.8
*/
public class RandomAccessFileTets {
public static void main(String[] args) throws Exception {
String str = "关注我,不迷路---我想月薪过万的CSDN";
//第一步:创建 ByteArrayInputStream
ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
//第二步:创建 ByteArrayOutputStream 参数 size 不写也没关系
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//第三步:创建 FileOutputStream ,因为 FileOutputStream 是节点流 ,只有它 才能和 文件介质互动
FileOutputStream fos = new FileOutputStream("src/IOTest/123.txt");
//第四步:文件读写
//规定一次读取数据大小
byte[] buffer = new byte[1024];
while (true){
int len = bais.read(buffer);
if (len == -1){
break;
}
baos.write(buffer,0,len);
}
//写入文件
baos.writeTo(fos);
//关闭流
bais.close();
baos.close();
fos.close();
}
}
效果展示
Data字节流
代码示例
心得:
- 感觉这个累的左右就是 FileXXXStream() 本身
- 但是他有个优点,从上面第二章api图就可以看出,他是数据处理流,可以直接获取 java 的各个数据类型
package IOTest;
import java.io.*;
/**
* ClassName: RandomAccessFileTets <br/>
* Description: <br/>
* date: 2021/8/2 19:47<br/>
*
* @author yiqi<br />
* @since JDK 1.8
*/
public class RandomAccessFileTets {
public static void main(String[] args) throws Exception {
//创建输入流
DataInputStream dis = new DataInputStream(new FileInputStream("src/IOTest/test.txt"));
//创建输出流
DataOutputStream dos = new DataOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
//读写数据
byte[] buffer = new byte[1024];
while (true){
int len = dis.read(buffer);
if (len == -1){
break;
}
dos.write(buffer,0,len);
}
//关闭流
dis.close();
dos.close();
}
}
缓冲字节流
代码示例
package IOTest;
import java.io.*;
/**
* ClassName: RandomAccessFileTets <br/>
* Description: <br/>
* date: 2021/8/2 19:47<br/>
*
* @author yiqi<br />
* @since JDK 1.8
*/
public class RandomAccessFileTets {
public static void main(String[] args) throws Exception {
//创建输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src/IOTest/test.txt"));
//创建输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
//读写数据
byte[] buffer = new byte[1024];
while (true){
int len = bis.read(buffer);
if (len == -1){
break;
}
bos.write(buffer,0,len);
bos.flush();//当缓冲区装满了之后,自动导出
}
//关闭流
bis.close();
bos.close();
}
}
总结
基流:InputStream、OutputStream
与文件打交道的节点流:FileInputStream、FileOutputStream
与内存打交道的节点流:ByteArrayInputStream、ByteArrayOutputStream
处理流:DataInputStream、DataOutputStream ||| BufferedInputStream、BufferedOutputStream
以上是关于java基础之 IO 流(InputStream/OutputStream)的主要内容,如果未能解决你的问题,请参考以下文章
javaio流之字节输入流:java.io.InputStream类及子类java.io.FileInputStream