首页 > 其他分享 >字节流

字节流

时间:2024-07-31 19:55:02浏览次数:7  
标签:读取 fos FileOutputStream new FileInputStream 字节

字节输出流(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 类


构造方法

1、使用文件名创建 FileOutputStream 对象。

String fileName = "example.txt";
FileOutputStream fos = new FileOutputStream(fileName);

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

2、使用文件对象创建 FileOutputStream 对象。

File file = new File("example.txt");
FileOutputStream fos = new FileOutputStream(file);

写入字节数据

写入字节 write(int b)

每次可以写入一个字节:

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

写入字节数组write(byte[] b)

// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 字符串转换为字节数组
byte[] b = "xxx".getBytes();
// 写入字节数组数据
fos.write(b);
// 关闭资源
fos.close();

写入指定长度字节数组write(byte[] b, int off, int len)

// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 字符串转换为字节数组
byte[] b = "abcde".getBytes();
// 从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b,2,2);
// 关闭资源
fos.close();

数据追加、换行

使用文件名和追加标志创建 FileOutputStream 对象:

String fileName = "example.txt";
boolean append = true;
FileOutputStream fos = new FileOutputStream(fileName, append);

使用文件对象和追加标志创建 FileOutputStream 对象:

File file = new File("example.txt");
boolean append = true;
FileOutputStream fos = new FileOutputStream(file, append);

实现数据追加代码如下:

// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt",true);     
// 字符串转换为字节数组
byte[] b = "abcde".getBytes();
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b);
// 关闭资源
fos.close();

在 Windows 系统中,换行符号是\r\n,在 macOS 系统中,换行符是 \n

字节输入流


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

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

2、int read(): 从输入流读取数据的下一个字节。

3、read(byte[] b): 该方法返回的 int 值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1

FileInputStream 类


构造方法

1、FileInputStream(String name):创建一个 FileInputStream 对象,并打开指定名称的文件进行读取。文件名由 name 参数指定。如果文件不存在,将会抛出 FileNotFoundException 异常。

2、FileInputStream(File file):创建一个 FileInputStream 对象,并打开指定的 File 对象表示的文件进行读取。

代码示例如下:

// 创建一个 FileInputStream 对象
FileInputStream fis = new FileInputStream("test.txt");

// 读取文件内容
int data;
while ((data = fis.read()) != -1) {
    System.out.print((char) data);
}

// 关闭输入流
fis.close();

读取方法

读取字节read()

读取一个字节并返回其整数表示。如果已经到达文件的末尾,则返回 -1。如果在读取时发生错误,则会抛出 IOException 异常:

// 创建一个 FileInputStream 对象
FileInputStream fis = new FileInputStream("test.txt");

// 读取文件内容
int data;
while ((data = fis.read()) != -1) {
    System.out.print((char) data);
}

// 关闭输入流
fis.close();

使用字节数组读取read(byte[] b)

从输入流中最多读取 b.length 个字节,并将它们存储到缓冲区数组 b 中:

// 创建一个 FileInputStream 对象
FileInputStream fis = new FileInputStream("test.txt");

// 读取文件内容到缓冲区
byte[] buffer = new byte[1024];
int count;
while ((count = fis.read(buffer)) != -1) {
    System.out.println(new String(buffer, 0, count));
}

// 关闭输入流
fis.close();

复制图片

// 创建一个 FileInputStream 对象以读取原始图片文件
FileInputStream fis = new FileInputStream("original.jpg");
// 创建一个 FileOutputStream 对象以写入复制后的图片文件
FileOutputStream fos = new FileOutputStream("copy.jpg");

// 创建一个缓冲区数组以存储读取的数据
byte[] buffer = new byte[1024];
int count;

// 读取原始图片文件并将数据写入复制后的图片文件
while ((count = fis.read(buffer)) != -1) {
    fos.write(buffer, 0, count);
}

// 关闭输入流和输出流
fis.close();
fos.close();

标签:读取,fos,FileOutputStream,new,FileInputStream,字节
From: https://www.cnblogs.com/sprinining/p/18335357

相关文章

  • IDEA 字节码工具 jclasslib bytecode viewer
    IDEA字节码工具jclasslibbytecodeviewer 1.下载安装 首先我们在IDEA的插件市场中搜索jclasslibbytecodeviewer和进行下载安装,安装过后根据IDEA版本的不同,可能需要重启才能使用。   2.使用 下载安装过后,在我们的项目中,首先先将整个项目进行编译,编译的......
  • c# RSA 要解密的数据超过此模块的最大值128/256字节
    publicstringDecrypt(){varbase64EncryptedData="";stringprivateKey=@"<RSAKeyValue>....</RSAKeyValue>";RSACryptoServiceProviderprovider=newRSACryptoServiceProvider();provider.FromXml......
  • Python 字节串转Hex字符串(一个久远的问题点总结)
    时间:2024.07.30作者:Yuan  这是一个今天看来似乎有点久远的问题,但是值得被记录和澄清一下!  那是在2022年1月份参与的一个项目中遇到的问题,大概需求是利用SHT40-AD1B-R2芯片,读取环境温度。其实就是通过i2c与这个温度传感器建立通讯,然后读取温湿度信息,对于上位机的......
  • 如何将 ctype 转换为字节
    我想访问我定义的ctype.Structure,作为Python中的字节(b'')。我不知道这是正确的方法吗?我需要将标头(它应该与架构无关)发送到其他设备。因此我将其定义为:classHeader(ctypes.Structure):_pack_=2_fields_=[('version',c_uint8......
  • 当读取字节时,Python 将 \n 解释为 0xd0
    换行符被解释为Ð(0xd0)而不是(0x0a),我真的不知道如何解决这个问题。我也不知道从哪里开始。当尝试使用此代码时,它将0x0a读为0xd0。withopen(path,"rb")asroot:b_arr=root.read()+b""print("Processing...")buffer=""b_arr......
  • 字节跳动推出端到端同声传译智能体;OpenAI 搜索引擎 SearchGPT 登场丨 RTE 开发者日报
        开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代......
  • 如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中
    在python3.11中,我们可以对字符串进行编码,如:string.encode('ascii','backslashreplace')这对于说:hellö=>hell\\xf6但是当我插入时hellöw\\xf6rldIgethell\\xf6w\\xf6rld(注意第二个有一个看起来像字符转义序列的文字部分)......
  • 无法将两个字节从 pi 5 主设备发送到从设备 arduino mega(使用 smbus2 库)
    因此,我尝试使用smbus2库中的write_byte函数,并成功使用RaspberryPi5中的该函数来打开和关闭连接到ArduinoMega的LED。我的项目涉及3RPS平行轴机械手由3个步进器控制,我正在通过Pi5使用计算机视觉进行数据采集,计算我希望每个机械手电机达到的必要速度......
  • 美团面试:如何计算一个对象在内存中占多少个字节?
    在分配对象的时候会有一些基本的规则,我们可以根据一些规则大致能判断出来对象大小。在HotspotVM中,对象在内存中的存储布局分为三个区域:对象头(Header)实例数据(InstanceData)对齐填充(Padding)对象头(Header)对象头包括以下三部分:MarkWord:用于存储对象运行时的数据,例如Has......
  • TypeError:预期的字符串或类似字节的对象,在使用导入运行 Pyinstaller 时得到“NoneType
    我正在尝试从Python创建可执行文件,但收到以下错误。我创建了一个干净的环境,并尝试仅通过导入和文件中的简单print('HelloWorld')来重现该问题,如下所示:importtkinterastkimportthreadingfromtkinterimportfiledialogfromtkcalendarimportDateEntryfro......