1.键盘录入--Java具有特定的对象封装这些输入输出设备
在System类定义 in-InputStream类型和out-PrintStream类型成员变量
阻塞是方法:read()无数据就阻塞
windows里面回车键对于两个字节\r-13\n-10
从系统获得流对象只有一个,所以别关流
InputStream in = System.in(调用的是系统的流,在Java中被定义为该中类型)
不要进行关闭,因为关闭的是系统的流否则会用不了。
StingBulider/StringBuffer清空用的是delete()
键盘录入的结束通常都是自定义结束的

2.转换流(字节流与字符流之间的转化)
字节流想利用字符缓冲流的readLine()--先转化为字符流,在被缓冲流装饰
InputStreamReader和OutputStreamReader继承Reader
InputStreamReader(InputStream in)--字节流转化为字符流可以指定charset编码
对于字节与字符流的区别:字节对于一个中文需要读两次,字符对于中文其实也是利用底层的字节流读两次再进行查表,返回一个中文字符。
字符流 = 字节流 + 编码表(未指定按照操作系统默认的码表)
编码:文字转化为数字encode
解码:数字转化为文字decode
流的传送:源A地--小管道--大管道--大管道--小管道--目的B地
转化流:可以指定编码表(未指定就用本机默认和其子类相同)
中文GBK-2B/UTF-8(国际标准-按照实际长度定字节数-每字节存在编码头)
指定用UTF-8写就要用UTF-8读
* 什么时候使用转化流:
源或目是字节流操作是文本数据,可以使用转化流,提高对 文本的操作
一旦文本操作涉及具体的编码表时候,必须使用转化流

3.流操作的基本规律---流只能对传送的数据进行操作
* 明确源地和目地
* 明确数据是否是纯文本数据--确定使用的具体体系
是:字符流
否:字节流
* 明确具体的设备
源设备:
硬盘--文件
键盘--System.in
内存--数组
网络--Socket流
目设备:
硬盘--文件
控制台--System.out
内存--数组
网络--Socket流
* 是否需要提高额外功能
需要高效(缓冲区)
是否需要转换流

4.File类--将存在/不存在的文件或文件夹封装成对象
* 方便对文件或文件夹的属性信息进行操作
* File类对象可以作为参数传递给流对象
* File类的常见方法
构造方法
File(File parent, String child) //1,2类似
File(String parent, String child)
File(String pathname)
字段
char separatorChar系统默认名称分隔符\\
char pathSeparatorChar系统默认路径分隔符
常见的方法
1.获取:文件名,文件路径,文件大小(不存在就0B),文件修改时间
注意文件路径:相对路径和绝对路径(从根目录开始)
2.创建与删除(文件、文件夹)
boolean-创建createNewFile()不存在就创建,存在就不创建,与输出来不同,每次 都是进行覆盖/或者续写 --只能操作的文件或目录,不可以操作里面的数据
删除boolean-delete() windows删除从里往外删除
创建单极或多级目录(删除多级目录--只会删除最里面的一个目录)
文件正在被访问不能删除
3.判断
先文件是否存在(是否目录/是否文件-针对存在)是否隐藏
4.重命名renameTo(File dest) 重命名文件
5.获取指定的当前目录下的文件及文件夹名称 String[]-list()
(包含隐藏的文件夹)
注意:封装File对象的时候必须是目录,不能是文件名
如果目录存在,会返回一个长度为0的数组
6.文件过滤器(重点)
list(FilenameFilter filter)-String[]
FilenameFilter--文件过滤器(接口)定义类--实现FilenameFilter接口
将该类的对象传递给List()方法
过滤器方法原理:先遍历目录,放在数组中并遍历,满足条件放在容器里面,
把集合转化为数组返回
7.深度变量文件夹--对指定目录的所有目录的列出[递归]
8.递归
* 一定要明确递归的条件,否则容易栈溢出
5.Map接口的子类Properties--可以和IO技术结合--Map集合的属性集
特点:集合中键和值都是字符串类型
集合中的数据可以保存在流中,或者从流中获取
作用:通常该集合用于操作以键值对形式存在的配置文件
配置文件:存储配置信息的文件,用于配置某些应用程序<键值对,xml,数据库>
遍历集合中元素:Set<String> stringPropertyNames()--变成集合,再迭代器
Properties与流的结合
list(PrintStream out)--直接将集合信息打印在控制台
store(OutputStream out, String comments)--将集合信息存储硬盘--这就叫持久化
两个参数,前面指定写的位置,后面字符串对数据进行描述--不要写中文注释
修改硬盘上存储的键值对信息
先读文件(保证里面是键值对)--放到集合--修改--存储
load(InputStream inStream) 读数据
java里面配置信息文件命名XX.properties/ini(windows系统)/xml文件
eg:记录程序使用的次数---使用Properties--仅仅是Properties一个使用方面
配置信息--通常用在保存应用程序的个性化设置(保存设置后关掉依然存在)
注意:递归过程保证容器唯一,不要将容器定义在方法里面,要传参数容器
定义方法的时候需要确定传入的参数--针对谁进行的处理

6.其他的流对象--辅助功能
打印流(不跑出异常):PrintStream--System.out返回值
构造方法:接收File,字符串路径,流out对象
常见方法:提供操作各种数据的打印方法。print方法保存数据的表示形式
print(97)--文件里面就是97,write(97)--会选择最低的1B存储不会保留形式
实现原理:将数字变成字符串然后写字符串
PrintWriter--使用平台默认编码方式
构造方法:接收File,字符串路径,流out对象,写字符流

序列流:SequenceInputStream--对于多个流的合并--只有处理源的对象
输入流的逻辑串联--把多条流封装为一条流(SequenceInputStream)
本质就是集合中装入多个流--最后一个流返回值当作是结束
将多个源合并成一个源
eg:文件切割(按照顺序切割)+文件合并
注意切割文件时候将文件类型和文件的个数存在一个配置文件里面,因为合并
的时候需要用到这些信息

对象流:ObjectInputStream/OutputStream--为了能够保存对象数据的关联性
存储的对象--在硬盘的文件里面(对象的持久化存储)对象流+文件流的配合使用
对象流的前提:要操作的对象必须实现serializable(标记接口)将对象转化为二进制数字流--对象要按照顺序存储在文件中--writeObject(Object obj)、readObject()
注意:*存储对象仅仅只是想延长对象的生命周期,所以并不关心写出去的格式。
*读对象所在文件时候必须使用基本流+对象流才能将数据转化为一个对象
*读对象的时候必须保证有该对象的类文件在内存在+写出去的文件--两个存在 才可以成功读对象--强制转型
*写对象--序列化;读对象--反序列化(类似于编码和解码)
*关于存储对象--存储的是对象的非静态成员变量(被transient修饰的也不会 写到对象文件里面--其他并无差别--非静态数据不想被序列化)
serializable(标记接口)存在的意义?--给类加ID
存储对象--序列化的时候得到一个序列化id号(对应的类也有相同的id号),再进行读对象的反序列化的过程中,会检测加载的类与原来的类的对象id是否一致,不一致就会发生异常,就不能读对象
不同版本的编译器可能编译的id结果不一致,解决办法自己定义对象序列化id号
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

RandomAccessFile--随机访问文件--不属于任何io的继承体系--字节流
特点
* 自身具备对随机访问文件的读写功能
* 该对象内部维护了一个byte数组,并通过指针可以操作数组中的元素--数组可以延长--自动扩展
* 可以设置和获取当前指针的位置
* 其实该对象将字节输入流和字节输出流的封装--为一个整体的工具对象
* 操作随机文件---只能是文件(源/目的)
* 构造方法的特殊之处--指定操作文件的模式(读写的控制四种可选)
* 该类里面有许多有用的方法读写基本数据类型(保证原本的字节数),字节数组等
* 如果文件不存在则创建,存在则不创建-不会覆盖
* 可以指定存储和写的位置,随机的对文件操作seek(long pos)--设置当前指针位置
没有指定的情况下是从0角标开始写(若原来存在则覆盖)
* 随机写--可以给任意位置写,可以从任意位置开始读
* 随机访问文件要求数据要有规律,长度可以进行规律的估计
* 小应用:利用多个线程负责不同地方的数据写数据(利用该类可以指定开始写位置)

PipedInputStream/PipedOutputStream-管道流[应用于多线程]
特点
* 输入流与输出流可以直接连接 read()<-->write()
* 管道流读必须要读管道流的输出
read()[阻塞方法没管道输出数据,就一直等待]-->write()[后面就执行不到]
程序就等待在这--一般用多线程可以处理该问题,写线程写出数据唤醒读线程
* 管道流内部含有一个缓冲区
* 需要调用connect()方法连接两个流

DataInputStream/DataOutputStream---操作基本数据类型
特点--保存基本数据类型的形态
* 使用结合+InputStream--读和写的类型必须一致
* writeUTF()--readUFT()对于使用(编码和解码是utf8修改版)自动添加的头信息

操作数组的流对象--[源与目都是内存上]
ByteArrayInputStream/ByteArrayOutputStream--用流的思想操作数组
特点
* 内存中存在可变长度的数组缓冲数据
* 不用关闭流(关闭流原因:调用底层的资源)--操作的内存不用底层的资源

* 不会抛出io异常
* ByteArrayInputStream(byte[] buf)--明确源内存
ByteArrayOutputStream()--自动包含数组--也可以指定缓冲区的大小
* 如果要操作的源是内存--直接就用ByteArrayInputStream
CharArrayReader/CharArrayWriter
StringReader/StringReader

7.常见的编码表
ASCII-可以是7bit字符
GBK--中文编码
unicode--统一处理方式固定长度编码--2B
utf-8--不固定长度的编码,最多可以用三个字节表示一个字符

Java基础总结--IO总结2的更多相关文章

  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技术(一)

    ---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理 ...

  5. java面试:java基础、Io、容器

    1.java基础 1.JDK 和JRE有什么区别 ​ JDK:java开发工具包,java开发运行环境.包含了JRE. ​ JRE:java运行环境,包含java虚拟机,java基础类库. 2.jav ...

  6. Java基础之IO和NIO补完

    Java Stream,File,IO 关于NIO和IO的比较,参考:Java NIO系列教程(十二) Java NIO与IO java包之java.io 参考材料:菜鸟教材 NIO 由于下面的系列教 ...

  7. 【Java基础】IO 流

    IO 流 File 类 java.io.File 类是文件和文件目录路径的抽象表示形式,与平台无关. File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内 ...

  8. 【java基础】]IO流

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

  9. 黑马程序员——JAVA基础之IO流缓冲区,转换流,字节流

    ------- android培训.java培训.期待与您交流! ---------- 字符流的缓冲区        缓冲区的出现提高了对数据的读写效率. 对应类 •  BufferedWriter ...

  10. java基础之 IO流

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

随机推荐

  1. Java第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  2. 框架应用:Spring framework (五) - Spring MVC技术

    软件开发中的MVC设计模式 软件开发的目标是减小耦合,让模块之前关系清晰. MVC模式在软件开发中经常和ORM模式一起应用,主要作用是将(数据抽象,数据实体传输和前台数据展示)分层,这样前台,后台,数 ...

  3. man page里面函数后面的括号中的数字代表的含义。

    Linux下最通用的领域及其名称及说明如下:领域 名称 说明 1 用户命令, 可由任何人启动的. 2 系统调用, 即由内核提供的函数. 3 例程, 即库函数. 4 设备, 即/dev目录下的特殊文件. ...

  4. 前端基础之HTML

    一.HTML 段落是通过 <p> 标签进行定义的 如: <p> hello world! </p> <html> 与 </html> 之间的 ...

  5. Project Euler:99 Largest exponential C++

    Comparing two numbers written in index form like 211 and 37 is not difficult, as any calculator woul ...

  6. EntityFramework 6.x多个上下文迁移实现分布式事务

    前言 自从项目上了.NET Core平台用上了EntityFramework Core就再没碰过EntityFramework 6.x版本,目前而言EntityFramework 6.x是用的最多,无 ...

  7. Apache下通过shell脚本提交网站404死链

    网站运营人员对于死链这个概念一定不陌生,网站的一些数据删除或页面改版等都容易制造死链,影响用户体验不说,过多的死链还会影响到网站的整体权重或排名. 百度站长平台提供的死链提交工具,可将网站存在的死链( ...

  8. Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...

  9. pygame_polygon

    今天我们要在窗口上绘制简单的多边形 1.认识几个简单的常用的颜色: black=(0,0,0) while=(255,255,255) red=(255,0,0) green=(0,255,0) bl ...

  10. Run Away 模拟退火

    Run Away Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...