当前位置: 首页 > news >正文

JAVA-编程基础-11-03-java IO 字节流

Lison <dreamlison@163.com>, v1.0.0, 2023.05.07

JAVA-编程基础-11-03-java IO 字节流

文章目录

  • JAVA-编程基础-11-03-java IO 字节流
    • 字节输出流(OutputStream)
    • FileOutputStream类
      • **FileOutputStrea 的构造方法**
        • 使用文件名创建FileOutputStream对象
        • 使用文件对象创建 FileOutputStream 对象
      • **FileOutputStream 写入字节数据**
        • 写入字节:`write(int b)` 方法,每次可以写入一个字节,代码如下:

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

字节输出流(OutputStream)

java.io.OutputStream字节输出流超类(父类),我们来看一下它定义的一些共性方法:

1、 close() :关闭此输出流并释放与此流相关联的系统资源。

2、 flush() :刷新此输出流并强制缓冲区的字节被写入到目的地。

3、 write(byte[] b):将 b.length 个字节从指定的字节数组写入此输出流。

4、 write(byte[] b, int off, int len) :从指定的字节数组写入 len 字节到此输出流,从偏移量 off开始。 也就是说从off个字节数开始一直到len个字节结束

FileOutputStream类

OutputStream 有很多子类,我们从最简单的一个子类 FileOutputStream 开始。看名字就知道是文件输出流,用于将数据写入到文件

FileOutputStrea 的构造方法

使用文件名创建FileOutputStream对象
String fileName = "example.txt";
FileOutputStream fos = new FileOutputStream(fileName);

以上代码使用文件名 “example.txt” 创建一个 FileOutputStream 对象,将数据写入到该文件中。如果文件不存在,则创建一个新文件;如果文件已经存在,则覆盖原有文件

使用文件对象创建 FileOutputStream 对象
File file = new File("example.txt");
FileOutputStream fos = new FileOutputStream(file);

使用实例:

        String fileName = "files/example.txt";FileOutputStream fos = null;try {fos = new FileOutputStream(fileName);fos.write("Lison".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}

以上代码创建了一个 FileOutputStream 对象,将字符串 “Lison” 写入到 example.txt 文件中,并在最后关闭了输出流。

FileOutputStream 写入字节数据

使用 FileOutputStream 写入字节数据主要通过 write 方法:

write(int b)
write(byte[] b)
write(byte[] b,int off,int len)  //从`off`索引开始,`len`个字节
写入字节:write(int b) 方法,每次可以写入一个字节,代码如下:
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 写出数据
fos.write(97); // 第1个字节
fos.write(98); // 第2个字节
fos.write(99); // 第3个字节
// 关闭资源
fos.close();

字符 a 的 ASCII 值为 97,字符 b 的ASCII 值为 98,字符 b 的ASCII 值为 99。也就是说,以上代码可以写成:

// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 写出数据
fos.write('a'); // 第1个字节
fos.write('b'); // 第2个字节
fos.write('c'); // 第3个字节
// 关闭资源
fos.close();

当使用 write(int b) 方法写出一个字节时,参数 b 表示要写出的字节的整数值。由于一个字节只有8位,因此参数 b 的取值范围应该在 0 到 255 之间,超出这个范围的值将会被截断。例如,如果参数 b 的值为 -1,那么它会被截断为 255,如果参数 b 的值为 256,那么它会被截断为 0。

在将参数 b 写入输出流中时,write(int b) 方法只会将参数 b 的低8位写入,而忽略高24位。这是因为在 Java 中,整型类型(包括 byte、short、int、long)在内存中以二进制补码形式表示。当将一个整型值传递给 write(int b) 方法时,方法会将该值转换为 byte 类型,只保留二进制补码的低8位,而忽略高24位。

例如,如果要写出的整数为 0x12345678,它的二进制补码表示为 0001 0010 0011 0100 0101 0110 0111 1000。当使用 write(int b) 方法写出该整数时,只会将二进制补码的低8位 0111 1000 写出,而忽略高24位 0001 0010 0011 0100 0101 0110。这就是参数 b 的高24位被忽略的原因。

0111 1000 是一个8位的二进制数,它对应的十进制数是 120,对应的 ASCII 码字符是小写字母 “x”。在 ASCII 码表中,小写字母 “x” 的十进制 ASCII 码值为 120。因此,如果使用 write(int b) 方法写出一个字节值为 0x78(十进制为 120),那么写出的结果就是小写字母 “x”。

在这里插入图片描述

http://www.lryc.cn/news/204113.html

相关文章:

  • python之Cp、Cpk、Pp、Ppk
  • 统信uos 1030 企业版 安装.net core环境
  • 2023/10/23学习记录
  • flask入门(四)前后端数据传输
  • JS——垃圾回收的原理
  • Spring Cloud Gateway 路由构建器的源码分析
  • IT行业哪个方向比较好就业?
  • uniapp中nvue页面使用fixed后,数据更改不更新到该视图。
  • 力扣第55题 跳跃游戏 c++ 贪心 + 覆盖 加暴力超时参考
  • 系列十四、Redis的集群(一)
  • 红帽认证 | RHCE考试包括哪些内容?
  • ASPICE标准快速掌握「3.1. 实践示例」
  • pytorch 训练可视化
  • webgis开发参考资料
  • JSX 注意事项
  • MQ常见的问题(kafka保证消息不丢失)
  • Unity编辑器扩展 --- AssetPostprocessor资源导入自动设置
  • 用Flask快速生成报表
  • 关于时序预测可解释性预测
  • 泊车功能专题介绍 ———— AVP系统技术要求之场地规范定位要求
  • 【STM32】时钟设置函数(寄存器版)
  • 【DDD】贫血模型和充血模型
  • 【JS学习】字符串的substring方法
  • vue部署,chunk文件有部分404,解决方案
  • 《红蓝攻防对抗实战》六.常规反弹之利用NC在windows系统执行反弹shell
  • python如何创建自己的对冲交易算法
  • Ubuntu22.04安装,SSH无法连接
  • 解决dirsearch扫描工具pkg_resources模块警告问题
  • JAVA-编程基础-11-04-java IO 字符流
  • 亚马逊云代码AI助手CodeWhisperer使用教程