标签搜索

目 录CONTENT

文章目录

Java中的FileOutputStream,BufferedOutputStream,FileWriter写文件速度比较

沙漠渔
2022-08-25 23:27:26 / 0 评论 / 0 点赞 / 997 阅读 / 2,601 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-08-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

背景说明

因工作需要,串口波特率使用2M,一秒需要接收150000个字节的数据进行解析并存储至文件中,起初是简单的一个线程直接一路下来,从inputstream中获取内容之后使用FileOutputStream写到文件中,结果发现写入到的文件内容经常会出现错乱的情况,怀疑是写入速度跟不上,于是进行了相应的验证,经确认修改为BufferedOutputStream可以完美解决当前问题。

测试代码

package com.test;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;

public class FileTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	

	        FileOutputStream out = null;
	        FileOutputStream outSTr = null;
	        BufferedOutputStream Buff = null;
	        FileWriter fw = null;

	        int count = 1000;//写文件行数

	        try {
	            //FileOutputStream
	            out = new FileOutputStream(new File("C:\\Users\\95342\\Desktop\\add1.txt"));
	            long begin = System.currentTimeMillis();
	            for (int i = 0; i < count; i++) {
	                out.write("测试java 文件操作\r\n".getBytes());
	            }
	            out.close();
	            long end = System.currentTimeMillis();
	            System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 毫秒");

	            //BufferedOutputStream
	            outSTr = new FileOutputStream(new File("C:\\Users\\95342\\Desktop\\add2.txt"));
	            Buff = new BufferedOutputStream(outSTr);
	            long begin0 = System.currentTimeMillis();
	            for (int i = 0; i < count; i++) {
	                Buff.write("测试java 文件操作\r\n".getBytes());
	            }
	            Buff.flush();
	            Buff.close();
	            long end0 = System.currentTimeMillis();
	            System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 毫秒");

	            //FileWriter
	            fw = new FileWriter("C:\\Users\\95342\\Desktop\\add3.txt");
	            long begin3 = System.currentTimeMillis();
	            for (int i = 0; i < count; i++) {
	                fw.write("测试java 文件操作\r\n");
	            }
	            fw.close();
	            long end3 = System.currentTimeMillis();
	            System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 毫秒");

	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            try {
	                fw.close();
	                Buff.close();
	                outSTr.close();
	                out.close();
	            } catch (Exception e) {
	                e.printStackTrace();
	            }
	        }

	    }
	

}

测试结果:

FileOutputStream执行耗时:11 毫秒
BufferedOutputStream执行耗时:1 毫秒
FileWriter执行耗时:6 毫秒

可以看到BufferedOutputStream明显优于其他方式,具体原因后面再详细整理,先处理完当前需求再说。

0
广告 广告

评论区