一切文件(文本、视频、图片)的数据都是以二进制的形式存储的,传输时也是。所以,字节流可以传输任意类型的文件数据。
流是一组有顺序得,有起点和终点得字节集合,是对数据传输得总称或抽象;数据在两设备间得传输称之为流;流得本质是数据传输,根据数据传输特性将流抽象为各种类,方便直观得进行数据操作。
1.字节输出流(OutputStream)
OutputStream 此抽象类是表示输出字节流得所有类得超类。
1、 close() :关闭此输出流并释放与此流相关联的系统资源。
2、 flush() :刷新此输出流并强制缓冲区的字节被写入到目的地。
3、 write(byte[] b):将 b.length 个字节从指定的字节数组写入此输出流。
4、 write(byte[] b, int off, int len) :从指定的字节数组写入 len 字节到此输出流,从off开始。 也就是说从off个字节数开始一直到len个字节结束。
FileOutputStream 写入字节数据:
使用 FileOutputStream 写入字节数据主要通过 write 方法;
//写入字节:write(int b) 方法,每次可以写入一个字节
write(int b);
//写入字节数组
write(byte[] b)//写入指定长度字节数组
write(byte[] b,int off,int len) //从`off`索引开始,`len`个字节
//输出流
private static void out() {
//1、确定目标文件
File file1 = new File("F:\\java基础\\src\\文件与IO\\file\\test01.txt");
//2、构建一个文件输出流对象
try {
//设置true 表示追加不是覆盖原本内容
OutputStream outputStream = new FileOutputStream(file1,true);
//3、输出得内容
String info = "床前明月光\r\n";
//4、把内容写入文件
outputStream.write(info.getBytes());
//关闭流
outputStream.close();
System.out.println("文件写入成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2.字节输入流(InputStream)
InputStream 此抽象类是表示字节输入流得所有超类;
1、close() :关闭此输入流并释放与此流相关的系统资源。
2、int read(): 从输入流读取数据的下一个字节。
3、read(byte[] b): 该方法返回的 int 值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1
1)FileInputStream的构造方法
1、FileInputStream(String name):创建一个 FileInputStream 对象,并打开指定名称的文件进行读取。文件名由 name 参数指定。如果文件不存在,将会抛出 FileNotFoundException 异常。
2、FileInputStream(File file):创建一个 FileInputStream 对象,并打开指定的 File 对象表示的文件进行读取。
2)FileInputStream读取字节数据
①读取字节:read()方法会读取一个字节并返回其整数表示。如果已经到达文件的末尾,则返回 -1。如果在读取时发生错误,则会抛出 IOException 异常。
②使用字节数组读取:read(byte[] b) 方法会从输入流中最多读取 b.length 个字节,并将它们存储到缓冲区数组 b 中。
3)字节流FileInputstream复制图片
把图片信息读入到字节输入流中,再通过字节输出流写入到文件中。
// 创建一个 FileInputStream 对象以读取原始图片文件
FileInputStream fis = new FileInputStream("image.jpg");// 创建一个 FileOutputStream 对象以写入复制后的图片文件
FileOutputStream fos = new FileOutputStream("image2.jpg");// 创建一个缓冲区数组以存储读取的数据
byte[] bytes = new byte[1024];
int len;// 读取原始图片文件并将数据写入复制后的图片文件
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, count);
}// 关闭输入流和输出流
fis.close();
fos.close();
//输入流
private static void in() {
//1、确定目标文件
File file2 = new File("F:\\java基础\\src\\文件与IO\\file\\test01.txt");
//2、构建一个文件输入流
try {
InputStream inputStream = new FileInputStream(file2);
byte[] bytes = new byte[1024];
//表示每次读取得字节长度
int len = -1;
StringBuilder stringBuilder = new StringBuilder();
//把数据读入数组中,并返回读取得字节数,当不等于-1时候,表示读取到数据;等于-1表示文件已经读完了
while((len=inputStream.read(bytes))!=-1) {
//根据读取到字节数组,再转换为字符串内容,添加到StringBuilder中;
stringBuilder.append(new String(bytes,0,len));
}
//输出内容
System.out.println(stringBuilder);
//关闭输入流
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
学习路上得笔记总结。