什么是流?

概念:内存与存储设备之间传输数据的通道。程序运行后保存在内存,文件一般在硬盘中,在程序中读写文件,需要在内存和存储设备中建立通道。数据借助流传输

流的分类:

按流向:

  • 输入流:将存储设备中的内容读入到内存中
  • 输出流:将内存中的内容写入到存储设备中

按单位:

  • 字节流:以字节为单位,可以读写所有数据。因为所有数据都是以字节的方式来存储的
  • 字符流:以字符为单位,只能读写文本数据。

 按功能:

  • 节点流:具有实际传输数据的读写功能
  • 过滤流:在节点流的基础之上增强功能

字节流:

  • 字节输入流: InputStream类

    方法:

      int availble()  //返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字数

      void close() //关闭此输入流并释放与该流关联的所有系统资源

      void mark(int readlimit)  //在此输入流中标记当前位置

      abstract int read()  //从输入流中读取数据的下一个字节

      int read(byte[] b)  //从输入流中读取一定数量的字节,并将其存储在缓存区数组b中

      int read(byte[] b, int off, int len)  //在指定位置将输入流中最多len个数据字节读入b数组

      void reset() //将此流重新定位到最后一次对此输入流调用mark方法时的位置

        long skip(long n)  //跳过和丢弃此输入流中数据的n个字节

  • 字节输出流:OutputStream类

     方法:

      void close()   //关闭此输出流并释放与该流关联的所有系统资源

      void flush()   // 刷新此输出流并强制写出所有缓冲的输出字节

      void write(byte[] b)  //将b.length个字节从指定的byte数组写入此输出流

      void write(byte[] b, int off, int len) //将指定byte数组中从偏移量off开始的len个字节写入此输出流

      abstract void wite(int b)  //将指定的字节写入此输出流

InputStream类和OutputStream类都是抽象类,不能实例化,应该用其子类,可用FileInputStream和FileOutputStream。

FileInputStream:

  构造方法:FileInputStream(File file)

       FileInputStream(String name)   //name指文件路径

         FileInputStream(FileDescriptor fdObj)

  方法:

    protected void finalize()   //确保文件不再引用文件输入流时调用close方法

FileOutputStream:

  构造方法:FileOutputStream(String name)  //每次写入都会覆盖原有的数据

         FileOutputStream(String name, boolean append)  //不覆盖原有数据

         FileOutputStream(File file)

         FileOutputStream(File file, boolean append)

       FileOutputStream(FileDescriptor fdObj)

       FileOutputStream(FileDescriptor fdObj, boolean isFdOwner)

package com.java.leetcode.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays; /*
演示FileInputStream(文件字节输入流)
演示FileOutputStream(文件字节输出流) */
public class Stream01 {
public static void main(String[] args) throws IOException {
//1.创建FileInputStream,文件可能没有,需要抛出异常
FileInputStream fis = new FileInputStream("D:\\stream01.txt");
//读取数据 单个字节fis.read() 效率低下
// int data;
// while ((data = fis.read()) != -1){ //fis.read()返回下一个字节,如果读到结尾返回-1
// System.out.print((char)data);
// }
byte[] buffer = new byte[3];
//比较拉垮,不采用,直接用循环读
// int count = fis.read(buffer); //该方法返回实际返回的个数
// System.out.println(new String(buffer)+"读取的字节数"+count); //hel只读了3个
// int count1 = fis.read(buffer); //接着读
// System.out.println(new String(buffer)+"读取的字节数"+count1); //lo 读取了三个
// int count2 = fis.read(buffer); //接着读
// System.out.println(new String(buffer)+"读取的字节数"+count2);//io读取了2个
int count = 0;
while ((count = fis.read(buffer)) != -1){
System.out.println(new String(buffer)+"读取的字节数"+count);
}
//2.创建FileOutputStream
//FileOutputStream fos = new FileOutputStream("D:\\stream01.txt");//该构造方法为每次写入的数据都覆盖原来的
FileOutputStream fos = new FileOutputStream("D:\\stream01.txt",true); //为不覆盖
fos.write(97);
fos.write('a');
fos.write('c');
System.out.println("执行完毕");
String str = "helloword";
fos.write(str.getBytes());
}
}

运行结果:

文件内容:

注意:代码的顺序是先读取再写入进去。

字节流复制文件:

package com.java.leetcode.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; /*
使用文件字节流实现文件的复制
*/
public class Stream02 {
public static void main(String[] args) throws IOException {
//文件字节输入流
FileInputStream fis = new FileInputStream("E:\\face01.jpg"); //抛出异常,文件可能不存在
//文件字节输出流
FileOutputStream fos = new FileOutputStream("E:\\face001.jpg"); //未复制前并不存在该文件。将face01复制,复制后的图片放在E盘下,明明为face001。jpg
//一边读,一边写
byte[] buffer = new byte[1024]; //每次读1k
int count = 0;
while ((count = fis.read(buffer))!=-1) {
fos.write(buffer);
}
//关闭
fis.close();
fos.close();
System.out.println("复制完毕!");
}
}

IO ——字节流的更多相关文章

  1. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  2. Java学习之IO字节流

    字节流分为FileInputStream 和FileOutputStream package com.io; import java.io.File; import java.io.FileInput ...

  3. Java提高篇(二):IO字节流、字符流和处理流

    在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写. 一.字节流 下面是一个字节流的实例: import java.io.*; public class I ...

  4. Java学习笔记28(IO字节流)

    IO定义: 写:Output操作:将内存上的数据持久化 到设备上,这个动作称为输出: 读:Input操作:把硬盘上的东西读取到内存,这个动作称为输入:              这两种操作称为IO流 ...

  5. 14、IO (字节流、字符流)

    输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 ...

  6. IO字节流。

    字节输出流: java.io.OutputStream :抽象类,是表示输出字节流的所有类的父类. java.io.FileOutputStream extends OutputStream: 文件字 ...

  7. Java IO 字节流与字符流 (五)

    Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...

  8. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  9. Java IO 字节流与字符流 (二)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

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

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

随机推荐

  1. phpstudy、Apache安装DVWA教程

    1.下载DVWA(http://www.dvwa.co.uk/) 2.解压缩DVWA安装包到服务器的目录下 Apache: \Apache24\htdocs phpStudy: \PHPTutoria ...

  2. CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) A ~ D

    A. 给定一个序列,对于任意1<=k<=n 都满足|ai−ak|+|ak−aj|=|ai−aj|, 找满足条件的i和j并输出 思路: 观察样例,发现输出的是最大值和最小值,那么猜答案是最大 ...

  3. SVPWM实现概述

    SVPWM是FOC的基础,其实现流程大致如下所示: 1. 判断合成矢量所在扇区 2. 计算相邻矢量作用时间 3. 计算各桥臂导通时间 4. 得到各相PWM占空比 5. 更新相应寄存器值  SVPWM目 ...

  4. 如何使用docker制作开发集成环境

    1. 编写最基本的Dockerfile 内容:touch 一个Dockerfile FROM ubuntu 2. 创建基本的docker镜像 docker build  -t ubuntu:v1 . ...

  5. JVM内存模型——堆(heap)、栈(stack)和方法区(method)

      JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:堆内存用于存放由new创建的对象和数组.堆是JVM管理的内存中最大的一块,堆被所有线程共享,目的 ...

  6. java 打包部署(一) windows

  7. 面试问题之计算机网络:TCP如何保证数据可靠传输

    转载于:https://blog.csdn.net/liuchenxia8/article/details/80428157 TCP协议传输的特点主要就是面向字节流.传输可靠.面向连接. TCP保证数 ...

  8. JRE、JDK、JVM 及 JIT 之间有什么不同?

    JRE 代表 Java 运行时(Java run-time),是运行 Java 引用所必须的.JDK 代 表 Java 开发工具(Java development kit),是 Java 程序的开发工 ...

  9. MiL → SiL → PiL → HiL 是什么?

    基于模型的快速原型开发通常分为四个过程:MiL → SiL → PiL → HiL 1. MiL(Model in Loop)模型在环  在PC上基于模型的测试,它的输出是经过验证的控制算法模型.验证 ...

  10. Linux ftp服务器部署(最简单的ftp教程)

    之前在阿里云领了一个ECS服务器(顺便说一句,白嫖的,真香~),就想着做点什么,然后试着做个 ftp 站点,因为第一次尝试,结果走了不少弯路.最后终于完成了,研究了两天(哎~,脑壳笨没办法)就想着记录 ...