一、OutputStream—字节输出流

  1. FileOutputStream—字节文件输出流,write数据后立刻写到文件中去
  2. BufferedOutputStream—带缓冲区的字节输出流,数据会先存放到缓存取,缓冲区满的话会自动flush到目的地。 也就是说这个类写数据必须要调用flush方法,否则数据无法写到目的地,当然也可以调用close方法,这个方法关闭流的时候会自动flush

二、Writer----字符输出流

  1. FileWriter—字符文件输出流,write后,会将字符转换成字节缓存到底层的bytebuffer中去,如果满了(或者调用flush,close方法),才会输出到目的地。
  2. BufferedWriter—字符缓冲输出流,writer后,会将字符缓存起来,如果满了(或者调用了flush,close方法),才会输出到目的地
  3. PrintWriter----字符输出流(可看成也是一个包装类,带缓冲区的,与BufferedWriter功能相似) 可以设置自动刷新,使用println(xxx)方法,自动输出到目的地。如果没有指定自动刷新,必须调用flush或者close方法。

三、问题

  1. 什么时候要用flush()方法?

上面的总结可以发现:字节流只有非Buffered的输出流才不需要调用flush() 或者使用了PrintWriter自动刷新了,BufferedOutputStream BufferedWriter PrintWriter(非自动刷新) 都需要显示的调用flush()方法。当然close的时候也会刷新,但是可能close的时候报错(这个方法会抛出异常),或者想及时的把数据发送给对方或者输出到文件,最好还是flush()一下。

总结:非buffer字节流才不需要调用flush

  1. 什么时候用字符流,什么时候用字节流?

字符操作用writer(最好是BufferedWriter)效率更高,操作方法
如果操作需要换行字符的使用PrintWriter。操作二进制文件,图片,音频等数据的时候,用字节流(最好使用BufferedOutputStream,效率高)

  1. 网络传输过程中-Socket编程过程中应该怎么使用输出流,输入流?
  • 发送图片,二进制文件,对象流等—最好使用BufferedOutputStream包装,然后输出字节流,需要flush
  • 发送字符串----最好用BufferedWriter或者PrintWriter包装,然后输出字符串,需要flush
  1. socket相关

socket读取的时候,read()操作是阻塞式的,也就是说,除非一端flush或者使用了非包装的字节流,这边才能读取到数据,当对方close关闭流的时候,才是真正的读取完毕

文章转自

Java输出流需要注意的几点细节相关推荐

  1. Java 输出流中的flush方法

    Java 输出流中的flush方法 Java中的IO流中的输出流一般都有flush这个操作,这个操作的作用是强制将缓存中的输出流(字节流,字符流等)强制输出. 为什么会有这么个方法啊? 因为输出流在进 ...

  2. Java 常见的 30 个误区与细节

    转载自 Java 常见的 30 个误区与细节 1.在Java中,没有goto语句.因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用.同时,为了避免程序员自行使 ...

  3. Java输出流FileOutputStream使用详解

    Java输出流FileOutputStream使用详解 http://baijiahao.baidu.com/s?id=1600984799323133994&wfr=spider&f ...

  4. Java实现CRM项目过程中的细节记录(一)

    CRM项目实现过程中的细节记录(一) 文章目录 CRM项目实现过程中的细节记录(一) 一.数据库相关细节 1. 表名 2. 表字段说明 3. 不使用主外键约束 4. 不使用主键自动增长 UUID 5. ...

  5. 第八十一期:Java性能优化:35个小细节,提升你的Java代码运行效率

    如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效 ...

  6. java原生的编译软件_原生态Java 程序员容易忽视的编程细节

    Java是Java程序设计语言和Java平台的总称,要想学好一门语言,打好基础最关键的,学习一种新的编程语言比学习新的口头语言要容易得多.然而,在这两种学习过程中,都要付出额外的努力去学习不带口音地说 ...

  7. java输出流输入流的使用_Java中的IO流之文件输入输出流

    Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...

  8. java输出流缓冲区内容清除,Java输入输出流与缓冲区的使用

    Java输入输出流与缓冲区的使用,有需要的朋友可以参考下. 一,Input/Output流: 将外设中的数据读取到内存中就是输入. 将内存中的数据写入到外设中就是出. I/O流就是用来处理设备间的 . ...

  9. java+输出流++空值_一文搞定Java的输入输出流等常见流

    点赞再看,养成习惯,常用流,多看多练准没错!文章较长,建议收藏再看! 1.IO流分析 什么是IO? I:Input O:Output 通过IO可以完成对硬盘的读和写. IO流的分类. 有多种分类方式: ...

最新文章

  1. python语言怎么用-这些小游戏是怎么用Python语言制作出来的……
  2. 普通索引和唯一索引,傻傻分不清楚?
  3. linux操作系统的体系结构
  4. Q120:PBRT-V3,“直接光照”积分器(14.3章节)(翻译不下去了)
  5. HDU 4122:Alice's mooncake shop RMQ(2011 Asia Fuzhou Regional Contest )
  6. Java NIO之缓冲区Buffer
  7. STC15F2K60S2单片机利用24C02记录单片机上电次数
  8. 两人互殴打架派出所如何处理
  9. Matlab中fprintf函数使用
  10. 超算计算机需要显卡吗,NVIDIA:中国超算性能世界第一认了 但省电我最强
  11. C 语言实现 - 判断元音/辅音
  12. Linux性能分析工具
  13. element ui 官网下载,elementui中文官网
  14. #详细分析# MySQL的 commit 和 rollback 操作
  15. html 实现在线选房,线上开盘选房技巧有哪些
  16. pad平板性能测试软件,安兔兔评测iPad版
  17. 为什么次对角线元素均不为零的三对角矩阵为不可约矩阵
  18. 162:Post Office
  19. python下载文件传到服务器_windows上python上传下载文件到linux服务器指定路径【转】...
  20. RfDNet 在Ubuntu16下的配置与运行——(二)数据准备与训练

热门文章

  1. Ubuntu下安装make
  2. 今天仔细学习了html加载执行的顺序
  3. [JS 分析] 汽_车_之_家 JS 生成 CSS 伪元素 hs_kw44_configUS::before
  4. cron和crontab
  5. 3ds Max制作客厅场景实例教程
  6. day01-homework_用户登录界面编写
  7. Android开发 listitem中采用倒计时
  8. 自动发送邮件(整理版)
  9. 经典算法题每日演练——第一题 百钱买百鸡
  10. .net中关键字new的用法