转载自     Java IO: OutputStream

译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

OutputStream类是Java IO API中所有输出流的基类。子类包括BufferedOutputStream,FileOutputStream等等。参考Java IO概述这一小节底部的表格,可以浏览完整的子类的列表。

输出流和目标媒介

输出流往往和某些数据的目标媒介相关联,比如文件,网络连接,管道等。更多细节请参考Java IO概述。当写入到输出流的数据逐渐输出完毕时,目标媒介是所有数据的归属地。

Write(byte)

write(byte)方法用于把单个字节写入到输出流中。OutputStream的write(byte)方法将一个包含了待写入数据的int变量作为参数进行写入。只有int类型的第一个字节会被写入,其余位会被忽略。(译者注:写入低8位,忽略高24位)。

OutputStream的子类可能会包含write()方法的替代方法。比如,DataOutputStream允许你利用writeBoolean(),writeDouble()等方法将基本类型int,long,float,double,boolean等变量写入。

这是一个OutputStream的write()方法例子:

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");
while(hasMoreData()) {int data = getMoreData();output.write(data);
}
output.close();

这个例子首先创建了待写入的FileOutputStream。在进入while循环之后,循环的判断条件是hasMoreData()方法的返回值。hasMoreData()方法的实现不予展示,请把这个函数理解为:当有剩余可写数据时,返回true,否则返回false。

请注意,为了清晰,这里忽略了必要的异常处理。想了解更多异常处理的信息,请参考Java IO异常处理。

write(byte[])

OutputStream同样包含了将字节数据中全部或者部分数据写入到输出流中的方法,分别是write(byte[])和write(byte[], int offset, int length)。

write(byte[])把字节数组中所有数据写入到输出流中。

write(byte[], int offset, int length)把字节数据中从offset位置开始,length个字节的数据写入到输出流。

flush()

OutputStream的flush()方法将所有写入到OutputStream的数据冲刷到相应的目标媒介中。比如,如果输出流是FileOutputStream,那么写入到其中的数据可能并没有真正写入到磁盘中。即使所有数据都写入到了FileOutputStream,这些数据还是有可能保留在内存的缓冲区中。通过调用flush()方法,可以把缓冲区内的数据刷新到磁盘(或者网络,以及其他任何形式的目标媒介)中。

close()

当你结束数据写入时,需要关闭OutputStream。通过调用close()可以达到这一点。因为OutputStream的各种write()方法可能会抛出IO异常,所以你需要把调用close()的关闭操作方在finally块中执行。这是一个OutputStream调用close()的例子:

OutputStream output = null;
try{output = new FileOutputStream("c:\\data\\output-text.txt");while(hasMoreData()) {int data = getMoreData();output.write(data);}
} finally {if(output != null) {output.close();}
}
   

这个例子在finally块中调用close()方法。虽然这种方式可以确保OutputStream关闭,但却不是一个完美的异常处理方案。我在Java IO异常处理这文章中更加详细地探讨了IO的异常处理。

Java IO: OutputStream相关推荐

  1. Java IO 体系(二): inputstream与outputstream

    Java中文件数据流操作有2个大类:OutputStream/InputStream接口 和 FileWriter/FileReader类 1. OutputStream接口:所有字节输出流的超类 包 ...

  2. Java IO 流 学习 总结

    I/O  主要是对文件进行处理, 其主要包含3个方面的内容 1 input 输入 2 out 出入 3 File 文件 Java 流的概念 流是一组有序的数据序列,流提供了一条通道程序,可以是这条通道 ...

  3. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  4. 你真的以为了解java.io吗 呕心沥血 绝对干货 别把我移出首页了

    文章结构 1 flush的使用场景 2 一个java字节流,inputstream 和 outputstream的简单例子 3 分别测试了可能抛出java.io.FileNotFoundExcepti ...

  5. java io 文件复制_实例讲述Java IO文件复制

    前言:IO流主要分为两大类,分别是字节流与字符流 注意: 1.音频文件.图片.视频(范围广),就用字节流 2.只涉及到文本的,就用字符流 使用字节流复制文本内容(其他文件也可以) 代码如下: impo ...

  6. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类 File 路径问题: 上下级文件夹之间使用分隔符分开: 在Windows中分隔符为'\' ,在Unix/Linux中分隔符为'/' 跨平台分隔符: 专业的做法是使用File.sepa ...

  7. java.IO字节流和字符流详解

    IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...

  8. Java IO流之字符缓冲流

    字符流: 1.加入字符缓存流,增强读取功能(readLine) 2.更高效的读取数据 BufferedReader 从字符输入流读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取. FileRe ...

  9. 从构造函数看java.io

    package java.io; interface有Closeable.Flushable abstract class 有InputStream.OutputStream.Reader.Write ...

最新文章

  1. html语言文字闪烁,html+CSS3实现的文字闪烁特效
  2. 三国志幻想大陆服务器维护,三国志幻想大陆8月14日更新维护公告
  3. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法
  4. 根据经纬度计算范围_遗传算法可视化项目(插曲):关于距离的计算
  5. python的for循环语句_干货丨Python的循环语句基础讲解!
  6. WEB前端 基础知识汇总
  7. oracle视图失效,ORACLE 11Gr2 V$ARCHIVED_LOG视图过期信息
  8. sony android电视关机,【索尼 KDL-48WM15B 48英寸 LED电视使用体验】通电|待机|关机|加载|设置_摘要频道_什么值得买...
  9. 算法 - 贪心算法(集合覆盖问题求解)
  10. 领域应用 | 从本体论开始说起——运营商关系图谱的构建及应用
  11. Notepad++中的UTF-8无BOM格式编码
  12. highgui java opencv_OpenCV在C Qt应用程序中的highgui
  13. 修改10g自动统计信息收集作业GATHER_STATS_JOB到仅仅周末执行
  14. 华彬 - 华彬讲透孙子兵法(2015年5月22日)
  15. VC6.0 files---open 出现 MSDEV.exe错误,Project ---- add to project 出现错误等等~~
  16. 免苹果开发者账号申请iOS上架及证书打包ipa测试(2022最新详解)
  17. MFC—界面设计(控件自适应,添加背景图,Static背景颜色设置)
  18. java毕业设计校园快递柜存取件系统(附源码、数据库)
  19. 阿里巴巴内推电话面试
  20. u盘与计算机识别不正常,U盘识别不了的原因及解决方法

热门文章

  1. 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!
  2. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)
  3. 每天一小时python官方文档学习(五)————数据结构之元组、集合与字典
  4. 一个例子带你搞懂python作用域中的global、nonlocal和local
  5. [SpringBoot2]HelloWorld
  6. 蓝桥杯2017初赛-分巧克力-二分
  7. Subset POJ - 3977(折半枚举+二分+二进制枚举)
  8. sql if 和insert_拼多多面试:Mybatis是如何实现SQL语句复用功能的?
  9. Java线程的6种状态
  10. min_25 推导及例题总结