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

流的分类

  • 按方向划分

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

字节流

字节流的父类(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. redis 分布式锁 PHP

    redis分布式 1.redis是单线程操作 2.分布式会出现的问题,死锁 3.redis分布式(集群).多台服务器里面都有多个单机redis.然后这些redis之间相互链接.还有查看各个单台服务器之 ...

  2. Windows活动目录_票据——敬请期待!

    票据:域控&域机子之间的信任密钥 [缺省40天更换一次] 域用户登录过程 域用户的账户密码(用信任密钥加密的)传递至域控: 域控验证账户密码成功后,构造域用户SID和组SID(用信任密钥加密的 ...

  3. PX01关于手机屏SPI触摸调试学习笔记

    上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.xk-image. ...

  4. 快速创建软件安装包-ClickOnce

    大家好,我是沙漠尽头的狼. .NET是免费,跨平台,开源,用于构建所有应用的开发人员平台. 今天介绍使用ClickOnce制作软件安装包,首先我们先了解什么是ClickOne. 1. 什么是Click ...

  5. (一)Spring Boot集成MyBatis快速入门

    一.在IDEA中创建Spring Boot项目 二.添加依赖(把以下三个依赖都勾上) 三.Maven POM (把上面的依赖选中后,创建项目,打开pom.xml文件就可以看到以下代码,即添加成功) & ...

  6. Linux下安装 SkyWalking 分布式追踪系统

    Linux下安装 SkyWalking 分布式追踪系统 1.SkyWalking简介 1.1 SkyWalking介绍 SkyWalking项目是由华为大牛吴晟开源的个人项目,目前已经加入Apache ...

  7. Kubernetes—资源管理

    3. 资源管理 3.1 资源管理介绍 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes. kubernetes的本质上就是一个集群系统,用户可以在集群中 ...

  8. 关于CSDN发布博客接口的研究

    前言 其实我之前就有一个想法,实现用 python 代码来发布博客, 因为我个人做了一个发布到 github 博客软件(其实就是实现 git 命令集成,还有markdown的渲染的软件), 如果我弄明 ...

  9. 关于windows上开启远程桌面连接不上的问题解决

    解决办法 启用远程桌面连接(计算机-属性-远程设置) 选择第二个:允许运行任意版本远程桌面 关闭防火墙(或者给远程桌面添加端口3389放行也可以) 创建用户以及密码 这里注意,一定要建立密码,只有账号 ...

  10. On Java 8读书笔记

    第一章 什么是对象 1.1 抽象的历程 "对象":问题空间中的元素及其解决方案空间中的具体呈现. 理念即是通过添加各种新的对象,可以将程序改编为一种描述问题的语言. 对象是具有状态 ...