OutputStream:是所有字节输出流的父类,其作用是:用这个流把网络数据(getOutputStream()),或者内存中的字节数组数据写到文件系统中文件系统(FileOutputStream)

   由与  public abstract class OutputStream implements Closeable, Flushable{},所以此类不可以直接实例化,只能实例化它的子类:ByteArrayOutputStreamFileOutputStreamFilterOutputStreamObjectOutputStream等.

   故对OutputStream的操作实际是对其直接子类或者间接子类的操作

以FileOutputStream为例:class FileOutputStream extends OutputStream{.....}

构造描述:输出流对象的创建

  public FileOututStream(File file) :     创建一个向指定File对象写入数据的文件输出流

  public FileOututStream(File file,boolean append) :    创建一个向指定File对象写入数据的文件输出流, append等于true,以追加内容的方式

  public FileOututStream(FileDescriptos fdObj) :创建一个向指定文件描述符处写入数据的文件输出流,该描述符表示一个到文件系统中的某个实际文件的现有链接

public FileOUTputStream(String name)  : 创建一个向指定的名称文件中写入数据的文件输出流

   public FileOUTputStream(String name,boolean append)  : 创建一个向指定的名称文件中写入数据的文件输出流,append等于true,以追加内容的方式

  实际上只有一个构造方法,那就是public FileOututStream(File file,boolean append),原因看源码,如下

public FileOututStream(String name,boolean append){

    this(name != null?new File(name) :null,append);

}

  public FileOututStream(File file,append){

    this(file,append);

}

方法描述:

  public void close():关闭这个流 并且释放这个流所有相关的资源
  public void flush(): 刷新此输出流并强制写出任何已缓冲的字节,
  public abstract void write(int b):将一个字节写入呲溜
  public void write(byte b[]):相当于write(b, 0, b.length),将特定的字节数组数据写到这个流中  ublic void write(byte b[], int off, int len):将字节数组中指定的区间的字节数据写进此流中
  
  实际上只有一个写方法,那就是public void write(int b),原因看源码,如下
 
  public void write(byte b[]) throws IOException {
      write(b, 0, b.length);
}
  所以 public void write(byte b[])相当于 public void write(byte b[],int off ,int len),而write(byte b[], int off, int len)源码如下
 public void write(byte b[], int off, int len) throws IOException {
     if (b == null) {
throw new NullPointerException();
} else if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
for (int i = 0 ; i < len ; i++) {
write(b[off + i]);
}
}
所以 public void write(byte b[],int off,int len)相当于 public void write(int b)
总之:写方法其实只有一个,那就是write(int b),其余方法都是系统对这个方式的封装
 

   
  

使用示例:

  FileOututStream out = new FileOututStream("D://e.txt");        创建文件输出流对象

  int acc_str = 97;

  out .write(acc_str );       // 方式1:write(int i)       -》    将a写到此流中

  out .write("I like java".getBytes());          //方式2: write(byte[] b)

  byte[] b  = new byte[] {97,98,99,100,101,102};

  out .write(b,0,2);          // 方式3: write(byte[] b,int start,int num)

  out .flush();          //将缓存中的数据强制写出到此流

  out.close();   //关闭此流

  

  

I/O输出流基础之FileOutputStream的更多相关文章

  1. 一切皆为字节和字节输出流_OutputStream类&FileOutputStream类介绍

    一切皆为字节 一切文件数据(文本.图片.视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此.所以,字节流可以传输任意文件数据.在操作流的时候,我们要时刻明确,无论使用什 ...

  2. Java基础 FileInputStream/ FileOutputStream / 字节输入流 字节输出流实现文件的复制

    FileInputStream/FileOutputStream的笔记: /**(FileInputStream/FileOutputStream四个步骤: ①声明②加载地址③read/write④c ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_3_字节输出流_OutputStream类&FileOutputStream

    都在IO包下 所有字节输出最顶层的父类 它是一个抽象类.abstract修饰的 一般这种类定义的都是所有字节流都可以使用公共的方法,

  4. Java-IO流之输入输出流基础示例

    一.理论: 1.什么是输入输出? 输入输出的对象是数据,数据的存储区域是磁盘或者光盘等设备,我们知道还有一个存储数据的空间----内存,其中磁盘的速度比较慢,内存的速度比较快,把数据读入内存的动作称作 ...

  5. JAVA面试基础

    JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...

  6. 常见Java基础知识(较长)

    1.抽象:  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象, ...

  7. java基础面试题(转)

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  8. java面试题及答案(基础题122道,代码题19道)

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  9. java基础知识4

    58.线程的基本概念.线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身.Java中的线程有四种状态分别是:运行.就绪.挂 ...

随机推荐

  1. 兄弟俩畅游Tomcat城市的SpringMVC科技园区

    Tomcat城市 Tomcat这座城市的历史相当悠久了,经历过几次大的变迁后,呈现出非常明显的地域特征. 从城市往西走,过了城乡结合部以后,可以说是满目疮痍.一片破败,这就是Servlet地区,这座城 ...

  2. .NET Core微服务系列基础文章索引(目录导航Final版)

    一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...

  3. [翻译 EF Core in Action 2.0] 查询数据库

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  4. Sql的分库分表,及优化

    对Sql细节优化 在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考. 首先给大家介绍一下分库分表 分库分表 分库 垂直分库 业务 ...

  5. MongoDB 运维相关的命令

    1.在线释放内存 use admindb.runCommand({closeAllDatabases:1}) 注:3.2 版本 已经去掉了这个命令了 2.rs.status() 查询复制集状态 3.d ...

  6. Java关于数字工具类~持续汇总~

    /** * 01 * 描述:求int数组中最大值 * [时间 2019年3月5日下午3:21:36 作者 陶攀峰] */ public static int test01(int[]sz) { int ...

  7. 分布式架构原理解析,Java开发必修课

    1. 分布式术语 1.1. 异常 服务器宕机 内存错误.服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用. 服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上. ...

  8. centos6.7 配置MongoDB日志

    这篇日志记录了笔者最近在centos6.7的系统中配置MongoDB的流程,参考了博客https://www.centos.bz/2017/08/centos-6-5-yum-install-mong ...

  9. 简单读!zookeeper单机模式的启动逻辑

    zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址:https://github.com/apache/zookeeper , 确认过眼神,它 ...

  10. mybatis-generator : 自动生成代码

    [参考文章]:mybatis generator自动生成代码时 只生成了insert 而没有其他 [参考文章]:Mybatis Generator最完整配置详解 1. pom <plugin&g ...