IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式进行,而操作流的对象都封装到java.io包中。根据操作数据的种类可以把IO流分为字节流(InputStream,OutputStream)和字符流(Reader,Writer)或者根据流的流向分为输入流(InputStream,Reader)输出流(OutputStream,Writer)

  字符流中继承体系结构:

  

字节流中的继承体系结构:

  FileWriter:字符输出流专门写入文本数据,使用后需要调用flush()方法,在close()方法后会自动内部刷新缓冲中的数据,因为是调用操作系统底层的资源进行文件操作,所以必须手动关闭资源,这个不是虚拟机垃圾回收机制能够回收的。

  FileReader:字符输入流可以使用char[]缓冲读取字符中的数据。使用try{}catch{}finally{}进行异常处理和资源回收。

  BufferedWriter:字符输出流缓冲区是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须要先有流对象。该缓冲区中提供了一个跨平台的换行符newLine()。

  BufferedReader:字符输入流缓冲区,该缓冲区提供了一个一次读一行的方法 readLine(),方便于对文本数据的获取,readLine方法返回的时候只返回回车符之前的数据内容,并不返回回车符。

  FileInputStream:字节输入流,原始的字节操作除了可以操作文本数据还可以操作视频、音频、图片等其他字符流不能操作的类型数据

  System.out:对应的是标准输出设备(PrintStream),控制台。System.in:对应的标准输入设备(InputStream):键盘输入。

  InputStreamReader:字节输入流转换器,可以把字节输入流转换成字符输入流。

  OutputStreamWriter:字节输出流转换器,可以把字节输出流转换成字符输出流。

  

流操作的基本规律:
  最痛苦的就是流对象有很多,不知道该用哪一个。

通过三个明确来完成。

  1,明确源和目的。
    源:输入流。InputStream Reader
    目的:输出流。OutputStream Writer。
  2,操作的数据是否是纯文本。
    是:字符流。
    不是:字节流。

  3,当体系明确后,在明确要使用哪个具体的对象。
    通过设备来进行区分:
    源设备:内存,硬盘。键盘
    目的设备:内存,硬盘,控制台。

  File:文件对象,不仅可以操作文件还可以操作对应的文件夹

  Properties:属性对象,是hashtable的子类也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串,是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。

  SequenceInputStream:合并多个流,对应的使用的就是Vector添加多个流对象。

  PipedInputStream,PipedOutputStream管道流可以直接读取和写入数据

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);

  RandomAccessFile该类不是算是IO体系中子类。而是直接继承自Object。但是它是IO包中成员。因为它具备读和写功能。内部封装了一个数组,而且通过指针对数组的元素进行操作。可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。其实完成读写的原理就是内部封装了字节输入流和输出流。通过构造函数可以看出,该类只能操作文件。而且操作文件还有模式:只读r,,读写rw等。

  DataInputStream与DataOutputStream可以用于操作基本数据类型的数据的流对象。  

  ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。

  ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。(因为这两个流对象都操作的数组,并没有使用系统资源。所以,不用进行close关闭。)

  

  编码:字符串->字节数组,解码:字节数组->字符串。出现乱码就是编码使用的格式生成的数字用另一种编码格式进行解码导致码表中无法读取正确的字符,当显示?表示没有找到对应的字符(我们会使用的基本也就是GBK和UTF-8,乱码也就是没有控制两者的统一),

java中的IO操作的更多相关文章

  1. Java中的IO操作和缓冲区

    目录 Java中的IO操作和缓冲区 一.简述 二.IO流的介绍 什么是流 输入输出流的作用范围 三.Java中的字节流和字符流 字节流 字符流 二者的联系 1.InputStreamReader 2. ...

  2. java中的IO操作总结

    一.InputStream重用技巧(利用ByteArrayOutputStream) 对同一个InputStream对象进行使用多次. 比如,客户端从服务器获取数据 ,利用HttpURLConnect ...

  3. java学习系列(一)Java中的IO操作

    Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入\输出操作,在Java中把不同的输入\输出源抽象为"流",通过流的方式允许Java程序使用相同的方式来访问不同的输 ...

  4. 【转】Java中的IO操作

    在使用io操作之前,先看一下java中的文件类File如何使用.File包括文件和目录,对文件和目录的操作是新建目录mkdir,新建文件createNewFile,删除文件和目录delete,以及其他 ...

  5. 第12讲-Java中的IO操作及对象的序列化与反序列化

    1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1  io操作 1.2.2  对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...

  6. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  7. java中的IO流

    Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...

  8. JAVA学习记录(二)————JAVA中的IO

    Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列. 数据流是一串连续不断的数据的集合,就象水 ...

  9. JAVA中通过Jedis操作Redis连接与插入简单库

    一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...

随机推荐

  1. SSM——(二):easyUI的CRUD

    1.在WebContent下新建admin目录,添加index.html(用来显示user表的CRUD): 总结: 1.datagrid接收的必须是json数据: 2.使用分页插件会自动向后台传递St ...

  2. Html5的表单

    跨浏览器 https://github.com/westonruter/webforms2 https://github.com/Modernizr/Modernizr http://www.blog ...

  3. mysql explain执行计划详解

      1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A:simp ...

  4. 设置button键隐藏文字text

     新手的第一天,从最简单的view开始做起.首先先来做个最简单的button携带不可见文本,想要的时候,get它就行了. 编程的都知道,get .set方法,就不多介绍了. 创建一个类,MyButto ...

  5. 20160626001 O2O Website

    1. http://sidapai.baijia.baidu.com/   百度百家 2. http://www.huxiu.com/    虎嗅网 3. http://i.wshang.com   ...

  6. Codeforces Round #363 (Div. 2)A-D

    699A 题意:在一根数轴上有n个东西以相同的速率1m/s在运动,给出他们的坐标以及运动方向,问最快发生的碰撞在什么时候 思路:遍历一遍坐标,看那两个相邻的可能相撞,更新ans #include< ...

  7. python中的 __slots__

    __slots__的作用是防止给class instance分配dict,达到控制instance 成员和节省内存的作用 class Slots(object): __slots__=("n ...

  8. 20-ES6(3)class基本语法

    # Class基本语法 关于es6的class简介: ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以 ...

  9. 使用Spring AsyncRestTemplate对象进行异步请求调用

    直接上代码: package com.mlxs.common.server.asyncrest; import org.apache.log4j.Logger; import org.springfr ...

  10. (转载)MongoingDB常用操作

    mongo –path db.AddUser(username,password)  添加用户 db.auth(usrename,password)     设置数据库连接验证 db.cloneDat ...