关于字节流得学习笔记

一切文件(文本、视频、图片)的数据都是以二进制的形式存储的,传输时也是。所以,字节流可以传输任意类型的文件数据。

 流是一组有顺序得,有起点和终点得字节集合,是对数据传输得总称或抽象;数据在两设备间得传输称之为流;流得本质是数据传输,根据数据传输特性将流抽象为各种类,方便直观得进行数据操作。

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();
	}
}

学习路上得笔记总结。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值