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

流的分类

  • 按方向划分

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

字节流

字节流的父类(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方法实现过滤

最新文章

  1. POCO库——Foundation组件之核心Core
  2. Windows 终端服务器授权 激活
  3. 最短路&&最小生成树水题
  4. php之上传类
  5. HDU 5929 Basic Data Structure 模拟
  6. mysql中的semi-join
  7. python 内建函数 str() 和 repr() 的区别
  8. 【SQL】Update中使用表别名、如何用表中一列值替换另一列的所有值
  9. CSS3实战开发 表单发光特效实战开发
  10. hdu5601 BestCoder Round #67 (div.2)
  11. vue中使用vue-quill-editor及上传图片到自己服务器
  12. Mybatis Cause: java.lang.ClassNotFoundException: Cannot find class:
  13. (4)HomeAssistant 自动化
  14. oracle 数据库 导出与导入 expdb和impdb使用方法 (服务器本机)
  15. ubuntu建立wifi热点的方法
  16. 成对使用new和delete,传值传引用
  17. SSH无密码登录的原理及配置
  18. python(43):collections模块
  19. Day 48 HTML 语言Day1
  20. 【代码笔记】iOS-GCD用法

热门文章

  1. 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
  2. 怎样在vue中隐藏el-form-item中的值、设置输入框的值是只读
  3. 齐博x1 APP要实现直播的关键两步
  4. 靶机: easy_cloudantivirus
  5. Charles基本功能
  6. 再来一次,新技术搞定老业务「GitHub 热点速览 v.22.44」
  7. 洛谷P4135 Ynoi2016 掉进兔子洞 (带权bitset?/bitset优化莫队 模板) 题解
  8. 【lvgl】01-lvgl移植之在linux上跑
  9. K8s集群环境搭建
  10. golang内置包管理工具go mod简明教程