Java的编程之旅40——字节流

目录

1.字节流简介

2.输出流

3.输入流

4.文件的复制

1.一次读一个字节

2.一次读多个字节

3.复制图片

5.缓冲区字节流读写

1.缓冲区字节流读取

2.缓冲区字节流写入


1.字节流简介

字节流是指以字节为单位进行数据的读写操作的流。字节流可以处理任意类型的数据,包括文本数据、音频数据、图像数据等。

字节流可以分为输入流和输出流两种。输入流用于从外部读取数据到程序中,输出流用于将程序中的数据写入到外部。

字节流的读取和写入操作是以字节为基本单位进行的,可以读取和写入任意长度的数据。字节流一般用于处理二进制数据,如图片、视频等。与字符流相比,字节流处理速度更快,适用于大量数据的读写操作。

常见的字节流类包括InputStream和OutputStream。其中,InputStream是字节输入流的抽象基类,定义了读取字节的方法;OutputStream是字节输出流的抽象基类,定义了写入字节的方法。

使用字节流进行读写操作的步骤一般包括:创建字节输入流对象或字节输出流对象,打开数据源或目标文件,通过字节流对象进行读写操作,关闭字节流对象。

注意:文件读写会产生异常,需要我们手动将异常抛出

2.输出流

FileOutputStream fos = new FileOutputStream("./mytest.txt");
byte[] arr = "hello world".getBytes();
fos.write(arr);
fos.close();

这段代码使用了Java的输出流来将字符串"hello world"写入到名为"mytest.txt"的文件中。

首先,创建一个FileOutputStream对象fos,指定文件路径为当前目录下的"mytest.txt",这个输出流会将数据写入到该文件中。

接下来,将字符串"hello world"转换为字节数组arr,使用getBytes()方法实现。

然后,调用fos的write()方法来将字节数组arr中的数据写入到文件中。

最后,调用fos的close()方法来关闭输出流,释放资源。

3.输入流

FileInputStream fis = new FileInputStream("./mytest.txt");
int by = 0;
while((by = fis.read()) != -1){
    System.out.println((char)by);
}
fis.close();

这段代码使用了Java的输入流来从名为"mytest.txt"的文件中读取数据,并将每个字节转换为字符输出到控制台。

首先,创建一个FileInputStream对象fis,指定文件路径为当前目录下的"mytest.txt",这个输入流会从该文件中读取数据。

接下来,创建一个整型变量by来保存每次读取的字节数据。初始化为0。

然后,使用while循环,判断fis的read()方法读取的字节数据是否为-1,如果不为-1,则继续循环。read()方法每次读取一个字节数据,并将其赋值给变量by。

在循环体内部,使用System.out.println()方法将变量by强制转换为字符并输出到控制台。

循环直到fis的read()方法返回-1,表示已经读取到文件末尾。

最后,调用fis的close()方法来关闭输入流,释放资源。

4.文件的复制

1.一次读一个字节

FileOutputStream fos = new FileOutputStream("./mytext.txt");
FileInputStream  fis = new FileInputStream("./mytext.txt");

int by = 0;
while((by = fis.read()) != -1){
    fos.write(by);
}

fos.close();
fis.close();

这段代码实现了将一个文件中的内容复制到另一个文件中。

首先,创建一个FileOutputStream对象fos,指定文件路径为当前目录下的"mytext.txt",这个输出流会将数据写入到该文件中。

接着,创建一个FileInputStream对象fis,指定文件路径为当前目录下的"mytext.txt",这个输入流会从该文件中读取数据。

然后,创建一个整型变量by来保存每次读取的字节数据。初始化为0。

使用while循环,判断fis的read()方法读取的字节数据是否为-1,如果不为-1,则继续循环。read()方法每次读取一个字节数据,并将其赋值给变量by。

在循环体内部,使用fos的write()方法将变量by写入到输出流中,即将数据写入到"mytext.txt"文件。

循环直到fis的read()方法返回-1,表示已经读取到文件末尾。

最后,调用fos和fis的close()方法来关闭输出流和输入流,释放资源。

2.一次读多个字节

FileOutputStream fos = new FileOutputStream("./mytext.txt");
FileInputStream  fis = new FileInputStream("./mytext.txt");

byte[] by = new byte[1024];
int len;
while((len = fis.read(by)) != -1){
    System.out.println(new String(bytes , 0 ,len));
}

fos.close();
fis.close();

这段代码实现了从一个文件中读取内容并打印出来。

首先,创建一个FileOutputStream对象fos,指定文件路径为当前目录下的"mytext.txt",这个输出流将用于写入数据。

接着,创建一个FileInputStream对象fis,指定文件路径为当前目录下的"mytext.txt",这个输入流将用于读取数据。

然后,创建一个byte数组by,大小为1024字节,用于暂存读取到的字节数据。

使用while循环,判断fis的read()方法读取的字节数是否不为-1,如果不为-1,则继续循环。read()方法每次最多读取by数组大小的字节数据,并将实际读取的字节数赋值给变量len。

在循环体内部,使用new String(bytes, 0, len)方法将读取到的字节数据转换为字符串,并打印出来。

循环直到fis的read()方法返回-1,表示已经读取到文件末尾。

最后,调用fos和fis的close()方法来关闭输出流和输入流,释放资源。 

3.复制图片

FileOutputStream fos = new FileOutputStream("./newpic.png");
FileInputStream  fis = new FileInputStream("./pic.png");

byte[] by = new byte[1024];
int len;
while((len = fis.read(by)) != -1){
    fos.write(by,0,len);
}

fos.close();
fis.close();

这段代码实现了从一个文件中读取内容并写入到另一个文件中。

首先,创建一个FileOutputStream对象fos,指定文件路径为当前目录下的"newpic.png",这个输出流将用于写入数据。

接着,创建一个FileInputStream对象fis,指定文件路径为当前目录下的"pic.png",这个输入流将用于读取数据。

然后,创建一个byte数组by,大小为1024字节,用于暂存读取到的字节数据。

使用while循环,判断fis的read()方法读取的字节数是否不为-1,如果不为-1,则继续循环。read()方法每次最多读取by数组大小的字节数据,并将实际读取的字节数赋值给变量len。

在循环体内部,使用fos的write(by, 0, len)方法将读取到的字节数据写入到输出流中。

循环直到fis的read()方法返回-1,表示已经读取到文件末尾。

最后,调用fos和fis的close()方法来关闭输出流和输入流,释放资源。

5.缓冲区字节流读写

1.缓冲区字节流读取

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./mytest.txt"));
int by;
while((by = bis.read()) != -1){
    System.out.println((char) by);
}
bis.close();

这段代码实现了使用BufferedInputStream来读取文件内容并打印出来。

首先,创建一个BufferedInputStream对象bis,并将其构造函数中传入一个FileInputStream对象,该对象指定了要读取的文件路径为"./mytest.txt"。BufferedInputStream是一个缓冲输入流,它可以提高读取效率。

接着,创建一个int类型的变量by,用于存储每次读取到的字节数据。

使用while循环,判断bis的read()方法读取的字节数据是否不为-1,如果不为-1,则继续循环。read()方法每次读取一个字节数据,并将其赋值给变量by。

在循环体内部,将读取到的字节数据通过强制类型转换为char类型,并使用System.out.println()方法打印出来,即将字节数据转换为字符并输出到控制台。

循环直到bis的read()方法返回-1,表示已经读取到文件末尾。

最后,调用bis的close()方法来关闭输入流,释放资源。注意,由于BufferedInputStream是基于FileInputStream的包装类,所以只需要关闭BufferedInputStream即可,不需要再单独关闭FileInputStream。

总之,这段代码使用BufferedInputStream来读取文件内容并打印出来,通过使用缓冲输入流可以提高读取效率。

2.缓冲区字节流写入

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("./mytest.txt"));

for(int i = 0; i < 10 ;i++){
    bos.write("hello\r\n".getBytes());
}

bos.close();

这段代码实现了使用BufferedOutputStream来向文件中写入字符串"hello",循环写入10次。

首先,创建一个BufferedOutputStream对象bos,并将其构造函数中传入一个FileOutputStream对象,该对象指定了要写入的文件路径为"./mytest.txt"。BufferedOutputStream是一个缓冲输出流,它可以提高写入效率。

然后,通过for循环,循环执行10次。循环体内部执行以下操作:

  1. 调用bos的write()方法,将字符串"hello\r\n"转换为字节数组getBytes()后,写入到输出流bos中。write()方法将指定的字节数组写入到输出流中。

  2. 字符串"hello\r\n"中的"\r\n"表示换行符,用于换行。

循环执行10次,即将"hello\r\n"写入文件10次。

最后,调用bos的close()方法来关闭输出流,释放资源。注意,由于BufferedOutputStream是基于FileOutputStream的包装类,所以只需要关闭BufferedOutputStream即可,不需要再单独关闭FileOutputStream。

总之,这段代码使用BufferedOutputStream来向文件中写入字符串,通过使用缓冲输出流可以提高写入效率。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊爆点大男主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值