字节流
-
IO流概述和分类
IO流介绍
1.IO:输入/输出(Input/Output)
2.流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为 流,流的本质是数据传输
3.IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载IO流分类
1.按照数据流向:输出流
;输入流
2.按照数据类型:主要(字节流
;字符流
),扩展(交换流
;对象流
;....)IO流使用场景
1.如果操作的是纯文本文件,优先使用字符流
2.如果操作的是图片、视频、音频等二进制文件,优先使用字节流
3.如果不确定文件类型,优先使用字节流.字节流是万能的流 -
字节流写数据
字节流抽象基类
1.InputStream
:这个抽象类是表示字节输入流的所有类的超类
2.OutputStream
:这个抽象类是表示字节输出流的所有类的超类
3.子类名特点:子类名称都是以其父类名作为子类名的后缀字节输出流
FileOutputStream(String name
):创建文件输出流以指定的名称写入文件使用字节输出流写数据的步骤
1.创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
2.调用字节输出流对象的写数据方法
3.释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)代码演示
public class FileOutputStreamDemo01 { public static void main(String[] args) throws IOException { //创建字节输出流对象 /* 注意点: 1.如果文件不存在,会帮我们创建 2.如果文件存在,会把文件清空 */ //FileOutputStream(String name):创建文件输出流以指定的名称写入文件 FileOutputStream fos = new FileOutputStream("/Users/blue/Desktop/javase12/aaaa/b.txt"); //void write(int b):将指定的字节写入此文件输出流 fos.write(97); //void close():关闭此文件输出流并释放与此流相关联的任何系统资源。 fos.close(); }
-
字节流写数据的三种方式
方法名 说明 void write(int b) 将指定的字节写入此文件输出流 一次写一个字节数据 void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数 组数据 void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据
代码演示
public class FileOutputStreamDemo02 { public static void main(String[] args) throws IOException {
//创建字节输出流对象
//FileOutputStream(String name):创建文件输出流以指定的名称写入文件
FileOutputStream fos = new FileOutputStream("/Users/blue/Desktop/javase12/aaaa/b.txt");
//void write(int b):将指定的字节写入此文件输出流
fos.write(97);
//void write(byte[] b):将指定的字节数组一字节一字节写入此文件输出流
byte[] bt = {97, 98, 99};
fos.write(bt);
// void write(void write(byte[] b, int off, int len)
fos.write(bt, 1, 2);
//void close():关闭此文件输出流并释放与此流相关联的任何系统资源。
fos.close();
}
字节流写数据如何实现换行
windows:\r\n
linux:\n
mac:\r
字节流写数据如何实现追加写入
1.public FileOutputStream(String name
, boolean append
)
2.创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
如下:
FileOutputStream fos = new FileOutputStream(
文件路径
,true
);
-
字节流读数据
字节输入流
FileInputStream(String name
):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件 系统中的路径名name命名字节输入流读取数据的步骤
1.创建字节输入流对象
2.调用字节输入流对象的读数据方法
3.释放资源
代码演示
public class FileInputStreamDemo03 { public static void main(String[] args) throws IOException {
//创建字节输入流对象
//FileInputStream(String name):创建文件输出流以指定的名称写入文件
FileInputStream fis = new FileInputStream("/Users/blue/Desktop/javase12/aaaa/b.txt");
int b;
whilr ((b = fis.read( )) != -1) {
System.out.print(" " + (char)b)
}
//void close():关闭此文件输入流并释放与此流相关联的任何系统资源。
fis.close();
}
字节流读数据(一次读一个字节数组数据)
一次读一个字节数组的方法:
public int read(byte[] b
):从输入流读取最多b.length个字节的数据 返回的是读入缓冲区的总字节数,也就是实际的读取字节个数
代码演示
public class FileInputStreamDemo04 { public static void main(String[] args) throws IOException {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("文件路径");
byte[] bys = new byte[1024]; //1024及其整数倍
int len;
//循环读取
while ((len=fis.read(bys))!=‐1) {
System.out.print(new String(bys,0,len));
}
//释放资源
fis.close();
}
-
字节缓冲流
字节缓冲流介绍
1.BufferOutputStream:该类实现缓冲输出流.通过设置这样的输出流,应用程序可以向底层输出流写入字 节,而不必为写入的每个字节导致底层系统的调用 2.BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组.当从流中读取或跳过字 节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节构造方法
方法名 说明 BufferedOutputStream(OutputStream out) 创建字节缓冲输出流对象 BufferedInputStream(InputStream in) 创建字节缓冲输入流对象 代码演示
public class BufferStream { public static void main(String[] args) throws IOException { //字节缓冲输出流: BufferedOutputStream(OutputStream out) BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件名")); //写数据 bos.write("hello\r\n".getBytes()); bos.write("world\r\n".getBytes()); //释放资源 bos.close(); //字节缓冲输入流: BufferedInputStream(InputStream in) BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径")); //一个字节字节读取 // int by; // while ((by=bis.read())!=‐1) { // System.out.print((char)by); // } byte[] bys = new byte[1024]; int len; while ((len=bis.read(bys))!=‐1) { System.out.print(new String(bys,0,len)); } //释放资源 bis.close(); }
网友评论