第2关:字节流-输入输出

输入流

我们通过一个示例,来看看输入流应该如何使用,首先我们在D盘下创建一个hello.txt文件。输入文本Hello Java Hello InputStream

main方法中加入如下代码:

输出:

Hello Java Hello InputStream

代码解释:

这个例子我们主要目的是,读取文件中的数据并将数据显示在控制台。

实现步骤是:首先读取文件转换成文件输入流(FileInputStream),然后定义一个字节数组作为容器用来存储即将读取到的数据。fs.read(b)函数的作用是将数据读取到b数组中,最后通过编码表,将字节数组编码成字符。

输出流

我们使用输出流将字符串hello educoder写入到一个文件中:

运行这段代码,打开D盘下你会发现test.txt文件被创建了,并且文件的内容是hello educoder

代码解释:

最佳实践

上面作为示例的两段代码都是存在很大问题的,什么问题呢?

因为在Java中对于流的操作是非常消耗资源的,如果我们使用流对一个资源进行操作了之后却没有释放它的资源,这就会造成系统资源的浪费,如果积累了很多这种空置的资源,最后可能会导致系统崩溃。

上述代码的最佳实践为:

 
  1. OutputStream out = null;
  2. try {
  3. String file = "D://test.txt";
  4. out = new FileOutputStream(file);
  5. String str = "hello educoder";
  6. byte[] b = str.getBytes();
  7. out.write(b);
  8. out.flush();
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. } finally {
  12. if (out != null) {
  13. try {
  14. out.close(); // 释放该输出流
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. }

核心就是在使用完流之后,释放它所占用的资源。

package step2;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
public class Task {
	
	public void task() throws IOException{
		/********* Begin *********/
		File file1 = new File("src/step2/input/task.txt");
		InputStream fs = new FileInputStream(file1);//定义一个文件输入流
		byte[] b1 = new byte[1024];//定义一个字节数组
		fs.read(b1);//将输入流的数据读入到字节数组中
        String str1 = new String(b1, "utf-8");//通过UTF-8编码表将字节转换成字符
		System.out.print(str1);//输出转换成的字节
		fs.close();//释放该输出流
 
		File file = new File("src/step2/output");//首先在src的step2中的output中创建一个文件
		if(!file.exists()){//如果文件存在
			file.mkdir();//调用这个函数
		}
		String file2 = "src/step2/output/output.txt";
		OutputStream out = new FileOutputStream(file2);//定义一个文件输出流
		String str2 = "learning practice";
		byte[] b2 = str2.getBytes(); //字符转化成字节
		out.write(b2);//字符写出到文件
		out.flush(); //刷新缓冲区数据(类似保存数据)
		out.close();//释放该输出流
		/********* End *********/
	}
	
}

关于字节流的输入和输出流,小白介绍到这里啦!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值