内存和存储设备之间传输数据的通道

流的分类

  • 按方向划分

    • 输入流(读):存储设备→内存
    • 输出流(写):内存→存储设备
  • 按单位划分、
    • 字节流:以字节为单位,可以读写所有数据
    • 字符流:以字符为单位,只能读写文本数据
  • 按功能划分
    • 节点流:具有实际传输数据的读写功能
    • 过滤流:在节点流的基础上增强功能

字节流

字节流的父类(InputStream 、 OutStream)
文件字节流
  • FileInputStream

    public int read(){}//读取单个字节
    public int read(byte[]b) {}//读取多个字节
    //读取完毕后会返回-1
  • FileOutputStream

    public void write(int n) {}//单字节写入
    public void write(byte[]b) {}//多字节写入
字节缓冲流

数据存储在缓冲区中,提高IO效率

BufferedInputStream/BufferedOutputStream

实例化字节缓冲流对象时需要一个底层流对象作为构造参数,eg:

  • BufferedInputStream in=new BufferedInputStream(new FileInputStream("路径"));
    //缓冲区的大小为8k
对象流

ObjectInputStream/ObjectOutputStream

内存 序列化> 存储设备 反序列化> 内存

调用readObject/writeObject读写对象

(1)进行序列化和反序列化的类必须实现serializable接口

  • public interface Serializable {
    }//该接口并没有抽象方法,只用来标记一个类可以被序列化

实例化对象流对象时也需要底层流对象作为构造参数

(2)除此之外,在此类内类类型的属性同样要实现serializable接口

(3)可以使用transient修饰符修饰类属性使其不被序列化,并且静态属性也不能序列化

(4)可以序列化一个集合来达到同时序列化多个对象的目的,此时反序列化的返回值也是一个集合

字符编码

字符流

字符流的父类(Reader 、Writer)
文件字符流
  • FileReader
  • FileWriter

与文件字节流实例化方法基本相同,只是传输的最小单位变为字符

文件字符流不能复制图片文件或者二进制文件

字符缓冲流
  • BufferedReader

    //readLine()方法,读取 一行文本
  • BufferedWriter

    //newLine()方法,写入一个换行符,便于多系统移植
打印流(PrintWriter)
转换流

可指定编码的字节字符转换流

  • InputStreamReader

  • OutputStreamWriter

    例如:

    new InputStreamReader(file,"UTF-8");
    //file为一个底层流对象,指定用utf-8编码读取文件
File类

代表物理盘符中的一个文件或者一个文件夹

  • createNewFile()//创建 -一个新文件
    mkdir()//创建一个新目录
    delete()//删除文件或空目录
    exists()//判断File对象所对象所代表的对象是否存在
    getAbsolutePath()//获取文件的绝对路径
    getName()//取得名字
    getParent ()//获取文件/目录所在的目录
    isDirectory()//是否是目录
    isFile()//是否是文件
    length()//获得文件的长度
    listFiles()//列出目录中的所有内容
    renameTo() //修改文件名为
  • 文件过滤器

    FileFilter接口

    File[] array=file.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
    if (pathname.getName().endsWith("txt"))
    return true;
    else
    return false;
    }//重写accept方法
    }//匿名内部类
    );//file为一个File类对象,调用listFiles方法实现过滤

Java基础篇——IO流的更多相关文章

  1. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  2. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  3. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  4. 【java基础】]IO流

    IO流 概念: 流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等 一个流,一定能够会有源和去向(目的地),他 ...

  5. java基础之 IO流

    javaIO流   IO流 : (input  output) 输入输出流 :输入 :将文件读到内存中 输出:将文件从内存输出到其他地方.   IO技术的作用:主要就是解决设备和设备之间的数据传输问题 ...

  6. java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理

    一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...

  7. java基础之io流总结一:io流概述

    IO流概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.io流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. IO流的分类: 根据处理数据类型的不同分为:字符流 ...

  8. 黑马程序员——JAVA基础之IO流FileReader,FileWriter

    ------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流  IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 J ...

  9. java基础06 IO流

    IO用于在设备间进行数据传输的操作. Java IO流类图结构:   IO流分类 字节流: InputStream FileInputStream BufferedInputStream Output ...

  10. java基础之IO流及递归理解

    一.IO流(简单理解是input/output流,数据流内存到磁盘或者从磁盘到内存等) 二.File类(就是操作文件和文件夹的) 1.FIleFile类构造方法 注意:通过构造方法创建的file对象是 ...

随机推荐

  1. 使用idea操作git(ssh协议)

    问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from remsitory.直接翻译 ...

  2. coding上创建项目、创建代码仓库、将IDEA中的代码提交到coding上的代码仓库、Git的下载、IDEA上配置git

    文章目录 一.Git的安装以及子啊IDEA上配置Git(下载好的可以跳过) 二.怎样让IDEA和Git建立关系 三.在coding上创建项目 四.在coding上创建代码仓库 五.Git工作理论 六. ...

  3. day52-正则表达式03

    正则表达式03 5.6正则表达式三个常用类 java.util.regex 包主要包括以下三个类:Pattern类.Matcher类和PatternSyntaxException类 Pattern类 ...

  4. 【UML】统一建模语言

    如果是准备学习设计模式的同学,可以只了解类图相关的知识 而如果是在准备软件设计师考试的同学,或许会对你有点帮助 正在施工...... 参考博客:https://blog.csdn.net/unique ...

  5. iptables介绍和基本使用

    iptables 防火墙是什么 防火墙好比一堵真的墙,能够隔绝些什么,保护些什么. 防火墙的本义是指古代构筑和使用木制结构房屋的时候,为防止火灾的发生和蔓延,人们将坚固的石块堆砌在房屋周围作为屏障,这 ...

  6. 初识Rasp——Openrasp代码分析

    初识Rasp--Openrasp代码分析 @author:Drag0nf1y 本文首发于奇安信安全社区,现转载到个人博客. 原文链接: https://forum.butian.net/share/1 ...

  7. 【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用

    引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对 ...

  8. 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率

    无论是 vue2 全家桶还是 vue3 + vite + TypeScript,组件库的使用几乎大家都会,但自己开发一个独立组件库就不是每个人都掌握的,因为搭建组件库的基础开发环境,就会让很多同学望而 ...

  9. 工作中,本人常用到的unzip、zip命令

    1. 命令安装 1.1 zip安装 yum install zip 1.2 unzip安装 yum install unzip 2. 常用命令 2.1 常用zip命令 2.1.1 压缩文件 zip x ...

  10. 查看、校验、归档…带你掌握openGauss账本数据库

    ​摘要:账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表. 本文分享自华为云社区<openGauss账本数据库,你不知道的那些事儿>,作者:Gauss松鼠会 ...