硬盘永久存储,硬盘中存储的数据都是字节、内存:临时存储
IO概述
I:input(输入) 读取
O:output(输出) 写入
流:数据(字符、字节) 1个字符=2个字节=8个二进制位
输入:是把硬盘中的数据读取到内存中使用
输出:把内存中的数据写入到硬盘中保存
根据数据分为:字符流、字节流
字节流: 字节输入流:InputStream 字节输出流:OutputStream
字符流: 字符输入流:Read 字符输出流:Writer
字节流:
一切皆为字节:
一切文件数据(文本、图像、视频)在存储时,都是以二进制的形式保存的,都是一个字节,那么传输时一样如此,所以字节流可以传输任意文件数据,在操作流的时候,我们要时刻明确,无论使用什么流的对象,底层传输的始终为二进制数据
字节输出流OutputStream
Java.io.OutputStream此抽象类是表示所有输出流所有类的超类(父类)将指定的字节信息写出到目的地
方法:
close() 关闭此输出流并释放此流有关的所有系统资源
flush() 刷新次输出流并强制写出所有缓冲的输出字节
write() 有3个 将数据写入到硬盘中
write(byte[] b)将b.length个字节从指定的byte数组写入此输出流
public void' write(byte[] b):将b.length字节从指定的字节数组写入此输出流 如果写的第一个字节是正数(0-127),那么显示的时候会查询ASCII表 如果写的第一个字节是负数,那第一个字节会和第二个字节组成一个中文显示,查询系统默认码表(GBK)
write(byte[] b,int off,int len ) 将指定的字节数组写入len个字节,从偏移量off开始输出到此的输出流
public void write(byte [] b,int off,int len):把字节数组的一部分写入到文件中
int off:数组的开始索引
int len:写几个字节
指定的字节数组写入len字节,从偏移量off开始输出到此输出流
write(int b)将指定的字节输出流 写一个字节
直接已知子类:ByteArrayOutputStream、FileOutputStream、FilterOutputStream ObjectOutputStream、OutputStream、PipeOutputStream
FileOutputStream文件字节输出流 作用:把内存中的数据写入到文件中
构造方法:
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
参数:写入数据的目的地
String name:目的地是一个文件的路径
File file :目的地是一个文件
构造方法作用:
- 创建一个FileOutputStream对象
- 会根据构造方法中传递的文件/文件路径,创建一个空的文件
- 会把FileOutputStream对象指向创建好的文件
写入数据的原理:(内存-硬盘)
Java程序—>JVMàOS(操作系统)àOS(自己方法)调用写数据的方法à把数据写入到文件中
字节输出流的使用步骤:
- 创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
- 调用FileOutputStream对象中的write方法把数据写入到文件中
- 释放资源(流使用会占用硬顶的内存,使用完毕要把内存清空,提高程序的效率)
fos.write(97);//在写入数据的时候,会把10进制整数97,转换为二进制整数
硬盘中存储的数据都是字节
任意的文本编辑器(记事本)再打开文件的时候,都会查询编码表,把字节转换为字符表示
0-127查询ASCII表
其他值查看系统默认码表(中文系统GBK)
详细代码:写入数据到电脑内存E:\\多线程\\a.txt
package demo27字节输出流写入数据到文件;
/*
构造方法:
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
参数:写入数据的目的地
String name:目的地是一个文件的路径
File file :目的地是一个文件
构造方法作用:
1. 创建一个FileOutputStream对象
2. 会根据构造方法中传递的文件/文件路径,创建一个空的文件
3. 会把FileOutputStream对象指向创建好的文件
*/
import java.io.FileOutputStream;
import java.io.IOException;
public class DemoOutputStream {
public static void main(String[] args) throws IOException {
//1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
FileOutputStream fos=new FileOutputStream("E:\\多线程\\a.txt");//FileOutputStream是有异常的需要抛出异常
//2.调用FileOutputStream对象中的write方法把数据写入到文件中
fos.write(97);//在写入数据的时候,会把10进制整数97,转换为二进制整数
//3.释放资源(流使用会占用硬顶的内存,使用完毕要把内存清空,提高程序的效率)
fos.close();
}
}
结果:
E:\\多线程刚开始时:
运行代码后: