此次测试OutputStream都是使用FileOutputStream。

FileOutputStream用于向文件写入文件。实现方式:

FileOutputStream buffer = null;try{

buffer= newFileOutputStream(file);byte[] n = "\n".getBytes();for (int i = 0; i < maxIndex; i++) {

buffer.write(line.generateLineMsg().getBytes());//随机产生一行数据

buffer.write(n);//if (i % 10== 0) {//buffer.flush();//}

}

buffer.flush();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(buffer);

}

OutputStreamWriter:专门用于处理文件的字符写入流对象。实现方式:

OutputStreamWriter writer = null;try{

writer= new OutputStreamWriter(newFileOutputStream(file));for(int i = 0;i < maxIndex;i++) {

writer.write(line.generateLineMsg());

writer.write("\n");//if(i % 10 == 0) {//writer.flush();//}

}

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(writer);

}

FileWriter:OutputStreamWriter的子类,在构造函数中,创建一个FileOutputStream初始化数据,其余和OutputStreamWriter相同;实现方式

FileWriter writer = null;try{

writer= newFileWriter(file);for(int i = 0;i < maxIndex;i++) {

writer.write(line.generateLineMsg());

writer.write("\n");//if(i % 10 == 0) {//writer.flush();//}

}

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(writer);

}

BufferedWriter:存储一个char数组(默认值是8192),用于缓存数据,需要一个Writer来写数据,如BufferedWriter和FileWriter;

对于write(int paramInt),判断当前存储是否超过了缓存最大值,如果超过,则将缓存写入到writer中;否则将数据添加到缓存中;

以下paramInt1 代表起始位置,paramInt2代表结束位置

对于write(char[] paramArrayOfChar, int paramInt1, int paramInt2)

如果paramInt2大于缓存大小(nChars值),即刻将缓存写入到writer中,然后将paramArrayOfChar写入writer中;否则将paramArrayOfChar从paramInt1到paramInt2写入到缓存中,一旦缓存满了,则写入到writer里。

对于write(String paramString, int paramInt1, int paramInt2)

paramString从paramInt1到paramInt2写入到缓存中,一旦缓存满了,则写入到writer里。

实现方式:

BufferedWriter buffer = null;try{

buffer= new BufferedWriter(new FileWriter(file),8192000);for(int i = 0;i < maxIndex;i++) {

buffer.write(line.generateLineMsg());

buffer.newLine();//if(i % 10 == 0) {//buffer.flush();//}

}

buffer.flush();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(buffer);

}

FilterOutputStream 需要一个OutputStream来写数据,如FileOutputStream,但是filterOutStream write(byte[] paramArrayOfByte, int paramInt1,int paramInt2) 是将byte数组一个个写入到OutputStream中。

FilterOutputStream buffer = null;try{

buffer= new FilterOutputStream(newFileOutputStream(file));byte[] n = "\n".getBytes();for (int i = 0; i < maxIndex; i++) {

buffer.write(line.generateLineMsg().getBytes());

buffer.write(n);//if (i % 100 == 0) {//buffer.flush();//}

}

buffer.flush();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(buffer);

}

BufferedOutputStream :是FilterOutputStream的子类,存储一个byte数组(默认值是8192),用于缓存数据,需要一个OutputStream来写数据,如FileOutputStream,

write(byte[] paramArrayOfByte, int paramInt1,int paramInt2)  1.如果paramInt2大于缓存最大数(byte数组大小),将缓存数据写入到流中,然后再将数据写入到流中;在1不成立的情况下,如果paramInt2大于缓存剩余的大小(即还没被写的byte),清空缓存;不管2是否成立,最后都会将数据写入到缓存中。

实现方式:

BufferedOutputStream buffer = null;try{

buffer= new BufferedOutputStream(new FileOutputStream(file),8192000);byte[] n = "\n".getBytes();for (int i = 0; i < maxIndex; i++) {

buffer.write(line.generateLineMsg().getBytes());

buffer.write(n);//if (i % 10 == 0) {//buffer.flush();//}

}

buffer.flush();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(buffer);

}

NIO : java1.4开始发布,非阻塞式IO,实现方式:

FileChannel chanel = null;

FileOutputStream outputStream= null;try{

outputStream= newFileOutputStream(file);

chanel=outputStream.getChannel();

ByteBuffer buffer=ByteBuffer.allocateDirect(BUFSIZE);byte[] n = "\n".getBytes();for(int i = 0;i < maxIndex;i++) {

buffer.put(line.generateLineMsg().getBytes()); //随机产生一行数据

buffer.put(n);if(i % 50000 == 0) {

buffer.flip();

chanel.write(buffer);

buffer.clear();

}

}

buffer.flip();

chanel.write(buffer);

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{

FileUtil.closeWriter(outputStream);

FileUtil.closeWriter(chanel);

}

要想NIO能快速写文件,Buffer大小需要配置好,大点速度快点。

通过让FileOutputStream,OutputStreamWriter,FileWriter,BufferedWriter,FilterOutputStream,BufferedOutputStream 写1G文件的对比,

因为有缓存原因(缓存设置好点),BufferedWriter和BufferedOutputStream NIO 速度差不多且是最快的,只是BufferedOutputStream 要将String转换成byte数组,如果纯粹生成一行数据能用byte存储,则BufferedOutputStream 速度很好,只是一行byte数组数据不好写。

FilterOutputStream速度最慢,主要是一个个byte写入流中。

部分函数说明

1,write(ch): 将一个字符写入到流中。

2,write(char[]): 将一个字符数组写入到流中。

3,write(String): 将一个字符串写入到流中。

4,flush():刷新流,将流中的数据刷新到目的地中,流还存在。

5,close():关闭资源:在关闭前会先调用flush(),刷新流中的数据去目的地。然流关闭。

关于写文件编码格式:

对于OutputStreamWriter可以指定文件编码格式保存数据。

对于FileWriter、FileOutputStream、BufferedWriter、FilterOutputStream、BufferedOutputStream没有提供写文件编码设置,则根据Charset.defaultCharset().name()这个返回的编码保存数据。

java全写_Java 写文件相关推荐

  1. java 编辑二进制文件_java写二进制文件,不能直接编辑,该怎么操作?

    java写二进制文件,不能直接编辑,该怎么操作? 关注:138  答案:3  mip版 解决时间 2021-01-14 21:48 提问者醒不来的梦 2021-01-14 07:45 我现在想做写一个 ...

  2. java 全角_java 全角半角字符转换的方法实例

    这篇文章主要介绍了java 全角半角字符转换的方法,大家参考使用吧 如果搞明白了Java中全角字符和半角字符之间的关系 那他们之间的转换根本就不是个事. 可以通过下面的程序看看Java中所有字符以及对 ...

  3. java 文件路径怎么写_java本地文件路径怎么写

    1. java里文件路径怎么写 File file = new File("D:\\123.txt"); 你这种不用绝对路径是不行的, 只有一个方法,在web工程启动servlet ...

  4. java 文件写_java写入文件的几种方法分享

    转自:http://www.jb51.net/article/47062.htm 一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所 ...

  5. java 数独算法_JAVA写的数独,附带生成唯一解和各种难度的算法

    [实例简介] 自己用GUI写的一个数独小游戏..可选择难度,生成一个只有唯一解的数独..可显示答案,玩家也可以自己做题.代码+算法全在里面 [实例截图] [核心代码] Sudoku ├── Sudok ...

  6. java 移动图片_Java写的一个简单的图片移动小程序

    前两天,有一个小姑娘让帮忙给其写一个小玩意,就是在Panel上绘制一个图片,然后通过键盘的方向键进行控制移动.虽然比较简单,这里还是希望和大家分享一下,里面有两点特别需要注意的知识点,这里一并加以说明 ...

  7. java 分子 分母_Java写一个类表示分数。分数由分子和分母组成。

    写一个类表示分数.分数由分子和分母组成. 写一个方法,实现分数相乘. 写一个方法,显示分数的值. 利用这个类:求分数 1/3 和 2/5 的乘积,并显示最终结果. public class zhouc ...

  8. java俄罗斯方块总结_java写的俄罗斯方块的心得

    1,分析游戏界面,通过游戏界面,抽象出来几种类型 2,定义类型 Cell: 公共特征:行号,列号,图片 共同行为:向左,向右,向下移动,提供JavaBean相关的规范 Tetromino类型,其七种组 ...

  9. java银行取款_Java写简单的银行取钱系统

    按ctrl+a 选中所有的代码删除,再复制下面的代码输入即可 import java.util.Scanner; public class 简单的银行取钱系统 //class的名字可以自己新建和这个一 ...

最新文章

  1. 【4】青龙面板系列教程之QQ通知机器人XDD-plus安装
  2. 基于协同训练的半监督文本分类算法
  3. 为什么Java中1000==1000为false,而100==100为true?
  4. RedHat AS4 配置Yum
  5. 中国科学家突破二氧化碳人工合成淀粉技术
  6. Java 查找链表中的元素
  7. MyEclipse10下开发第一个Hibernate小程序
  8. 【Java 强化】代码规范、JavaBean、lombok、内省(Introspector)、commons 项目、注解详解
  9. 续上节,,基于App布局信息操作手机
  10. yii操作数据库(AR)
  11. Css选择器权重排序详解+权重计算
  12. 详解Dijkstra算法(含数学证明和优化)
  13. 二、写JS代码的三种方式
  14. ClassNotFound找不到 redis.clients.jedis.JedisShardInfo
  15. 给不给你升职,领导关心的是什么?
  16. 如何帮助公司设计一个优秀的品牌标志?
  17. 转载:十年驾车经验总结:活着,才是硬道理
  18. NFT带给我们普通人的机遇是什么?
  19. 如何用计算机技术,如何利用计算机技术快速高效建立学籍档案
  20. 零基础入门 Python 人工智能 (Ai)

热门文章

  1. MATLAB从入门到精通-APP调用simulink中的参数,并且修改,将结果返回到APP中
  2. FastText情感分析和词向量训练实战——Keras算法练习
  3. hadoop学习--单表关联
  4. Python入门100题 | 第011题
  5. Python编程基础:第十四节 列表Lists
  6. 一文读懂HTTP/2 及 HTTP/3特性
  7. Tomcat7启动报Error listenerStart错误--转载
  8. UNIX下的环境变量--转载
  9. 人工智能升格为国家战略 唐小僧积极发展金融科技
  10. 勿谈大,且看Bloomberg的中数据处理平台