Java输出流需要注意的几点细节
一、OutputStream—字节输出流
- FileOutputStream—字节文件输出流,
write数据后立刻写到文件中去
- BufferedOutputStream—带缓冲区的字节输出流,
数据会先存放到缓存取,缓冲区满的话会自动flush到目的地。
也就是说这个类写数据必须要调用flush方法,否则数据无法写到目的地,当然也可以调用close方法,这个方法关闭流的时候会自动flush
二、Writer----字符输出流
- FileWriter—字符文件输出流,
write后,会将字符转换成字节缓存到底层的bytebuffer中去,如果满了(或者调用flush,close方法),才会输出到目的地。
- BufferedWriter—字符缓冲输出流,writer后,
会将字符缓存起来,如果满了(或者调用了flush,close方法),才会输出到目的地
- PrintWriter----字符输出流(可看成也是一个包装类,带缓冲区的,与BufferedWriter功能相似) 可以设置自动刷新,
使用println(xxx)方法,自动输出到目的地。如果没有指定自动刷新,必须调用flush或者close方法。
三、问题
- 什么时候要用flush()方法?
上面的总结可以发现:字节流只有非Buffered的输出流才不需要调用flush() 或者使用了PrintWriter自动刷新了,BufferedOutputStream BufferedWriter PrintWriter(非自动刷新) 都需要显示的调用flush()方法。当然close的时候也会刷新,但是可能close的时候报错(这个方法会抛出异常),或者想及时的把数据发送给对方或者输出到文件,最好还是flush()一下。
总结:非buffer字节流才不需要调用flush
- 什么时候用字符流,什么时候用字节流?
字符操作用writer(最好是BufferedWriter)效率更高,操作方法
如果操作需要换行字符的使用PrintWriter。操作二进制文件,图片,音频等数据的时候,用字节流(最好使用BufferedOutputStream,效率高)
- 网络传输过程中-Socket编程过程中应该怎么使用输出流,输入流?
- 发送图片,二进制文件,对象流等—
最好使用BufferedOutputStream包装,然后输出字节流
,需要flush- 发送字符串----
最好用BufferedWriter或者PrintWriter包装
,然后输出字符串,需要flush
- socket相关
socket读取的时候,read()操作是阻塞式的,也就是说,除非一端flush或者使用了非包装的字节流,这边才能读取到数据,当对方close关闭流的时候,才是真正的读取完毕
文章转自
Java输出流需要注意的几点细节相关推荐
- Java 输出流中的flush方法
Java 输出流中的flush方法 Java中的IO流中的输出流一般都有flush这个操作,这个操作的作用是强制将缓存中的输出流(字节流,字符流等)强制输出. 为什么会有这么个方法啊? 因为输出流在进 ...
- Java 常见的 30 个误区与细节
转载自 Java 常见的 30 个误区与细节 1.在Java中,没有goto语句.因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用.同时,为了避免程序员自行使 ...
- Java输出流FileOutputStream使用详解
Java输出流FileOutputStream使用详解 http://baijiahao.baidu.com/s?id=1600984799323133994&wfr=spider&f ...
- Java实现CRM项目过程中的细节记录(一)
CRM项目实现过程中的细节记录(一) 文章目录 CRM项目实现过程中的细节记录(一) 一.数据库相关细节 1. 表名 2. 表字段说明 3. 不使用主外键约束 4. 不使用主键自动增长 UUID 5. ...
- 第八十一期:Java性能优化:35个小细节,提升你的Java代码运行效率
如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效 ...
- java原生的编译软件_原生态Java 程序员容易忽视的编程细节
Java是Java程序设计语言和Java平台的总称,要想学好一门语言,打好基础最关键的,学习一种新的编程语言比学习新的口头语言要容易得多.然而,在这两种学习过程中,都要付出额外的努力去学习不带口音地说 ...
- java输出流输入流的使用_Java中的IO流之文件输入输出流
Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...
- java输出流缓冲区内容清除,Java输入输出流与缓冲区的使用
Java输入输出流与缓冲区的使用,有需要的朋友可以参考下. 一,Input/Output流: 将外设中的数据读取到内存中就是输入. 将内存中的数据写入到外设中就是出. I/O流就是用来处理设备间的 . ...
- java+输出流++空值_一文搞定Java的输入输出流等常见流
点赞再看,养成习惯,常用流,多看多练准没错!文章较长,建议收藏再看! 1.IO流分析 什么是IO? I:Input O:Output 通过IO可以完成对硬盘的读和写. IO流的分类. 有多种分类方式: ...
最新文章
- python语言怎么用-这些小游戏是怎么用Python语言制作出来的……
- 普通索引和唯一索引,傻傻分不清楚?
- linux操作系统的体系结构
- Q120:PBRT-V3,“直接光照”积分器(14.3章节)(翻译不下去了)
- HDU 4122:Alice's mooncake shop RMQ(2011 Asia Fuzhou Regional Contest )
- Java NIO之缓冲区Buffer
- STC15F2K60S2单片机利用24C02记录单片机上电次数
- 两人互殴打架派出所如何处理
- Matlab中fprintf函数使用
- 超算计算机需要显卡吗,NVIDIA:中国超算性能世界第一认了 但省电我最强
- C 语言实现 - 判断元音/辅音
- Linux性能分析工具
- element ui 官网下载,elementui中文官网
- #详细分析# MySQL的 commit 和 rollback 操作
- html 实现在线选房,线上开盘选房技巧有哪些
- pad平板性能测试软件,安兔兔评测iPad版
- 为什么次对角线元素均不为零的三对角矩阵为不可约矩阵
- 162:Post Office
- python下载文件传到服务器_windows上python上传下载文件到linux服务器指定路径【转】...
- RfDNet 在Ubuntu16下的配置与运行——(二)数据准备与训练