String是一个类,属于引用类型。
Java程序中一切使用""引起来的内容,都是这个类的实例,称为字符串对象。
字符串定义后是一个常量,值不可更改。字符串实际上是一个字符数组。
频繁更改String类型变量的值,不要使用String对象操作字符串,效率很低又浪费内存空间。
如果要频繁更改字符串中的值,建议使用StringBuilder类或StringBuffer类。
如何创建一个字符串对象 1.使用""赋值创建String str = "hello";
2.通过构造方法创建
| 常用构造方法 | 说明 |
|---|---|
| String() | 创建一个空字符串对象,实际创建一个空字符串数组 |
| String(String str) | 创建一个指定的字符串对象,实际是创建以后形参字符串的副本 |
| String(char[] list) | 创建一个指定字符数组的字符串对象 |
| String(byte[] list) | 按默认编码创建一个指定字节数组的字符串对象 |
| String(byte[] list,String charsetName) | 按指定的编码格式创建一个指定字节数组的字符串对象 |
-
在使用字符串时,如果要比较其值是否相同时,不要使用==,因为==判断的是内存地址,要使用String重写的equals方法判断。
-
String中的equals方法判断原理:将两个字符串保存到字节数组中,再岁每个字符逐一比较,全部一致则返回。
-
在使用equals方法时,要将已知的非空字符串作为调用者。
String字符串对象是一个常量,在定义后其值不可改变。
如果使用String类的对象,对其频繁更新时,就会不停的创建新的对象,重新引用。
StringBuilder类用于表示字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率略高于StringBuffer。
StringBuffer类是线程安全的,建议在多线程环境下使用。
StringBuilder和StringBuffer中的 方法作用一致,只不过StringBuffer中的方法使用了synchronized关键字修饰,表示一个同步方法,在多线程环境下不会出现问题。
构造方法| 常用构造方法 | 作用 |
|---|---|
| StringBuilder() | 创建一个大小为16的字符数组。类似于String str=""; |
| StringBuilder(int capacity) | 创建一个指定大小的字节数组 |
| StringBuilder(String str) | 创建一个str长度的字符串数组后,将str添加到其中。类似于String str="初始值"; |
| 方法 | 作用 |
|---|---|
| append(Object obj) | 将指定内容添加到原可变字符串对象末尾 |
| delete(int start,int end) | 删除[start,end)范围内的字符 |
| deleteCharAt(int index) | 删除指定索引的字符 |
| insert(int index,Object obj) | 将obj添加到index位置上 |
| replace(int start,int index) | 将[start,end)范围内的字符替换为str |
| reverse() | 翻转原字符串 |
-
以上方法都是直接操作原字符串,每个方法调用后,原字符串都会变化。
-
StringBuilder和StringBuffer中并没有重写equals方法,所以要比较两个可变字符串对象的值是否相同时,需要将可变字符串对象转换为String对象后,调用equals方法比较。
有些方法如getBytes()、contains()等,只能通过String调用,这时就需要进行转换。
不可变字符串转换为可变字符串通过创建一个可变字符串对象,将不可变字符串作为参数实现转换
String str = "hello"; StringBuilder sb = new StringBuilder(str);可变字符串转换为不可变字符串
通过调用可变字符串的toString()方法实现转换
StringBuilder sb = new StringBuilder("hello");
String str = sb.toString();
可变字符串面试题
比较String、StringBuilder、StringBuffer这三个类的区别
相同点-
都可以用于表示或操作一个字符串
-
有公共的方法,如indexOf()、charAt()等
-
都是被final修饰的 类,不能被继承
-
String定义的字符串是一个常量,不可变;StringBuffer和StringBuilder定义的字符串是一个变量,可以改变。
-
String类中的方法调用后,会创建字符串副本,不会影响原字符串;可变字符串对象调用的方法,直接操作原字符串,会影响。
-
StringBuilder是非线程安全的,StringBuffer是线程安全的,其中的方法使用synchronized修饰为同步方法。在多线程环境下,需要使用StringBuffer。StringBuilder效率略高于StringBuffer。
这个类包含了一些系统相关的信息和操作数组的方法。其中的方法和属性都是静态的。
| 常用属性和方法 | 作用 |
|---|---|
| System.in | 获取系统输入流对象,通常用于获取输入信息 |
| System.out | 打印输出流对象,打印普通信息 |
| System.err | 打印输出流对象,通常用于打印异常信息 |
| System.exit(int statues) | 终止虚拟机运行,0表示正常结束 |
| System.getenv(String key) | 获取系统指定环境变量信息 |
| System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,原数组要赋值的元素数量) | 将原数组中指定长度的元素复制到新数组中 |
| System.currentTimeMills() | 获取1970.1.1 0:0:0至今经过了多少毫秒。中国的是UTC(+8)所以从1970.1.1 8:0:0至今经过了多少毫秒,返回long类型 |
Runtime类的对象,用于表示程序运行时对象
包含了程序运行环境相关信息。常用于获取运行环境信息(如虚拟机内存)或执行某个命令。
特点这个类不是一个抽象类,但是不能创建对象,因为其构造方法是私有的。
但是它提供了一个静态方法getRuntime(),通过这个方法,可以获取一个Runtime类的对象。
这就是java中的一种设计模式--单例模式(只能有一个对象创建)
简单使用Runtime类的对象,可以通过exec()方法执行一个指令,如notepad指令打开记事本,或执行一个存在于硬盘中的.exe可执行文件。该方法返回值是一个Process进程对象,通过Process进程对象调用destory()方法可以摧毁当前进程。
总结参数只有是引用类型(类、数组、接口),且方法中直接操作该参数时,才会对实参造成影响。
包装类Java是纯面向对象语言,宗旨是将一切事物视为对象处理。
但原始类型不属于对象,,使用时无需创建对象,保存在栈中。包装类就是原始类型对应的类的类型。
在web应用中,从浏览器获取到的后台数据,全是String类型,一定要使用转换的方法。
-
所有包装类中都有一个compareTo(参数1,参数2)方法,用于比较两个参数
-
如果是数值型,参数1>参数2返回1,参数1<参数2返回-1,相同返回0
-
如果为Boolean型,两个参数相同返回0,不同返时,如果参数1为true返回1,否则返回-1
-
如果是Character型,返回参数1-参数2的值。
-
-
所有的包装类中都有toString()方法,用于将保证类对象转换为String字符串对象
-
所有包装类都有一个静态方法valueOf(原始类型),将某个原始数据类型的数据转换为相应的包装类对象,这个过程称为装箱。
-
所有包装类都有一个原始类型value(),用于将包装类对象转换为原始数据类型,这个过程称为拆箱。
用于表示日期时间的类,位于java.util包下
构造方法| 常用构造方法 | 说明 |
|---|---|
| Date() | 创建当前瞬间的日期对象 |
| Date(long l) | 创建指定毫秒数对应的日期对象。(从1970.1.1起经过了的毫秒数) |
| Date(int year,int month,int date) | 该构造方法已过时。创建指定年月日的日期对象。(年从1900开始,月用0-11) |
| 常用方法 | |
|---|---|
| getTime() | 得到相应Date对象指定的毫秒数 |
| steTime(long l) | 设置毫秒数 |
| after(Date when) | 判断调用日期对象是否在when之后 |
| before(Date when) | 判断调用日期对象是否在when之前 |
是一个用于格式化日期的类。
常用方法| 常用方法 | 返回值 | 作用 |
|---|---|---|
| fromat(Date date) | String | 将Date对象按日期模板转换为字符串 |
| parse(String str) | Date | 将满足日期模板的字符串转换为Date对象 |
用于表示日历的类。包含了很多日历相关信息。
是一个抽象类,无法直接创建对象,可以通过静态方法getInstance()获取该类实例。
Calendar c = Calendar.getInstance();日历字段
该类中定义了很多被final和static修饰的日历字段,用于获取指定信息
| 值 | 说明 |
|---|---|
| Calendar.YEAR | 获取年份 |
| Calendar.MONTH | 获取月份0-11 |
| Calendar.DATE | 获取日期 |
| Calendar.DAY_OF_WEEK | 获取星期(1-7表示周天到周六) |
| Calendar.HOUR_OF_DAY | 获取二十四小时制的小时 |
| Calendar.MINUTE | 获取分钟 |
| Calendar.SECOND | 获取秒 |
| Calendar.DAY_OF_MONTH | 本月中的第几天 |
| Calendar.DAY_OF_YEAR | 本年中的第几天 |
| Calendar.WEEK_OF_MONTH | 本月中的第几周 |
| Calendar.WEEK_OF_YEAR | 本年中的第几周 |
| 常用方法 | |
|---|---|
| get(日历字段) | 获取指定日历字段实际值 |
| getTime() | 获取对应的Date对象(Calendar转换为Date) |
| getMaximum(日历字段) | 获取指定字段支持的最大值,如Calendar.Date支持的最大值为31 |
| getActuaMaximum(日历字段) | 获取指定日历在实际时间下的最大值。如4月Calendar.Date实际最大值为30 |
| getTimeZone() | 获取当前日历在实际时间下的失去信息 |
| set(日历字段,值) | 将指定日历字段设置为指定值 |
| set(年,月,日) | 设置指定的年月日 |
Throwable是异常类的根类,通常所说的异常其实是指Exception子类
Error错误如果出现XXXXError,如StackOverflowError栈空间溢出时,无法通过额外的代码去解决,只是修改源码。
Exception异常如果出现XXXXException,如NullPointerException空指针异常时,可以通过额外代码去避免。
-
运行时异常(RuntimeException)
-
可通过编译,在运行时有可能会抛出异常
-
| 常见运行时异常 | 说明 | 出现情景 |
|---|---|---|
| NullPointerException | 空指针异常 | |
| ArrayIndexOutOfBoundsException | 数组下标越界异常 | |
| ClassCastException | 对象转型异常 | |
| InputMismatchException | 输入类型不匹配异常 | |
| AirthmeticExcetion | 算术运算异常 | |
| IIIegalArgumentException | 非法参数异常 |
-
非运行时异常(除RuntimeException)
-
无法通过编译
-
| 常见非运行时异常 | 说明 | 出现场景 |
|---|---|---|
| IOException | 输入输出流异常 | |
| SQLException | 数据库SQL相关异常 | |
| FileNotFoundException | 文件未找到异常 |
finally语句一定会执行
方式二:throws关键字-
throws表示用于方法声明异常。使用时写在方法的小括号之后
public void fun() throws Exception{
}
-
throw用于手动抛出异常对象。使用时写在{}中,通常用于满足某种条件时,强制中断程序。
public void fun(){
RuntimeException e = new RuntimeException();
throw e;
}
数组的特点
-
保存的元素都是有序的,可以通过下标访问
-
数据类型相同
-
长度定义后无法改变
-
无法获取其中保存的实际元素数量
-
可以保存一组数据,可以有序也可以无序
-
容量可变
-
可以保存不同类型的数据
-
可以获取集合中实际的元素数量
| 常用构造方法 | 说明 |
|---|---|
| ArrayList() | 创建一个无参ArrayList对象,实际是创建了一个空的Object数组。在调用添加元素方法时,才会初始化该数组大小为10 |
| ArrayList(int capacity) | 创建一个指定容量的ArrayList对象,实际是创建了一个空的Object数组,如果参数为负,会抛出IIIegalArgumentException异常 |
| 常用方法 | 作用 | 返回值 |
|---|---|---|
| add(Object obj) | 添加obj至集合末尾 | boolean |
| add(int index,Object obj) | 添加obj到index索引上 | void |
| get(int index) | 得到指定index索引的元素 | Object |
| set(int index,Object obj) | 使用obj覆盖index索引的元素,返回被覆盖的元素 | Object |
| size() | 获取集合中的元素数量 | int |
| remove(Object obj) | 删除指定obj对象 | boolean |
| remove(int index) | 删除指定index索引元素,返回被删元素 | Object |
| contains(Object obj) | 判断是否存在obj元素 | boolean |
| indexOf(Object obj) | 得到元素obj第一次出现的索引 | int |
| lastIndexOf(Object obj) | 得到元素obj最后一次出现的索引 | int |
| subList(int from,int to) | 得到[from,to)区间内的元素 | List |
| toArray() | 将集合转换为数组 | Object[] |
-
数组中元素是有序的,可以快速通过下标访问
-
数据类型相同
-
数组长度在定义之后无法改变
-
数组无法获取其中保存的实际元素数量
-
能保存一组数据,可以有序也可以无序
-
容量可变
-
可以保存类型不同的数据
-
可以获取集合中实际的元素数量
集合的根接口为:Collection接口和Map接口,位于java.util包中
Collection接口核心的两个子接口:Set和List
Set接口保存数据是无序不重复的,List接口保存数据时是有序可重复的。
List接口(有序可重复)元素可以重复,允许保存null,可以通过索引获取到对应位置上的元素。
方法:获取元素数量,添加,删除,替换,截取等
ArrayList实现类-
采用数组实现的集合
-
可以通过索引访问元素、可以改变大小,如果在其中插入或删除元素时,会影响其他元素。该集合查询效率高,增删中间元素效率低。
-
该集合对象中保存的元素,都是引用类型(对象的地址)。即使保存了123,其实保存的不是int的123,而是Integer类型的123。
构造方法
| 常用构造方法 | 说明 |
|---|---|
| ArrayList() | 创建一个空的Object数组,在调用添加元素的方法时,才会初始化该数组大小为10。 |
| ArrayList(int capacity) | 创建一个指定容量的Object数组,如果参数为负,会抛出IIIegalArgumentException异常 |
-
采用双向链表实现的集合
-
如果要查询某个节点的索引,需要从头结点或尾结点开始一步步得到目标节点位置
-
所以中间进行插入和删除的效率较高,随机读取的效率低
构造方法
| 常用的构造方法 | 说明 |
|---|---|
| LinkedList() | 创建一个空链表 |
常用方法
| 常用方法 | |
|---|---|
| addFirst() | 添加头结点 |
| addLast() | 添加尾结点 |
| getFirst() | 得到头结点 |
| getLast() | 得到尾结点 |
| remove() | 删除头结点 |
| removeFirst() | 删除头结点 |
| removeLast() | 删除尾节点 |
| push(Object obj) | 添加头结点(入栈) |
| pop() | 得到并移除头结点(出栈) |
| peek() | 得到头结点 |
| poll() | 删除头结点 |
| offer(Object obj) | 添加尾结点 |
-
二者都是List接口的实现类,保存的元素有序可重复,允许保存null,拥有一些公共方法
-
ArrayList采用数组实现,对于随机读取效率更高,通常用于查询;LinkedList采用双向链表实现,插入删除不影响其他元素位置,通常用于中间插入删除。
无序集合,元素不可以重复,允许保存null,没有索引。
哈希码的特点-
如果两个对象的hashCode不同,这两个对象一定不同
-
如果两个对象的hashCode相同,这两个对象不一定相同
-
如"通话"和"重地"这两个字符串的hashCode相同,但是是两个对象
-
hashCode相同,对象不同,称为哈希冲突
-
-
元素不能重复,无序保存,允许保存null
-
本质是一个HashMap对象,调用add()方法,实际调用的也是HashMap中的put()方法,参数作为put()方法的键,new Object()作为put()方法的值
if{两个对象hashCode相同&&两个对象equals相同}{视为同一对象,不能添加}
equals方法和hashCode的关系 TreeSet实现类-
特殊的Set实现类,数据可以有序保存,可以重复,不能添加null元素
-
采用红黑树(自平衡二叉树)实现的集合
-
二叉树表示某个节点最多有两个子节点
-
某个节点右侧的节点值都大于左侧节点值
-
-
只能添加同一种类型的对象且实现了Comparable接口的对象
-
实现Comparable接口后必须要重写compareTo方法
-
每次调用添加时,参数会自动调用该方法
-
-
添加的元素可以自动排序
-
compareTo方法的返回值决定了能否添加新元素和新元素的位置
-
如果返回0,视为同一对象,不能重复添加
-
如果返回正数,将新元素添加到现有元素之后
-
如果返回负数,将新元素添加到现有元素之前
-
构造方法
| 常用构造方法 | 说明 |
|---|---|
| TreeSet() | 实际会创建一个TreeMap对象 |
常用方法
| 常用方法 | 作用 |
|---|---|
| add(Object obj) | 添加元素到集合中 |
| size() | 得到元素数量 |
| isEmpty() | 判断集合是否为空 |
| clear() | 清空集合 |
| ceiling(Object obj) | 得到指定元素大的最小元素 |
| floor(Object obj) | 得到指定元素小的最大元素 |
| first()/last() | 得到第一个/最后一个原始 |
TreeSet的应用
如果要保存的元素需要对其排序时,使用该集合。
HashMap实现类-
HashMap的数据结构采用"数组+链表+红黑树"实现
-
当没有哈希冲突时,元素保存到数组中
-
如果哈希冲突,在对应的位置上创建链表,元素保存到链表中
-
当链表元素数量大于8,转为红黑树
-
-
数据采用"键值对"的形式保存,键为key,值为value,键不能重复,允许null,值没有限制,键和值都是引用类型
-
在哈希表中,哈希表就是键,保存的数据就是值,可以通过键得到相应的值
构造方法
| 常用构造方法 | 说明 |
|---|---|
| HashMap() | 创建一个空的集合对象,默认大小为16 |
常用方法
| 常用方法 | 作用 |
|---|---|
| put(Object key,Object value) | 添加一组键值对 |
| get(Object key) | 根据键得到值 |
| size() | 得到键值对的数量 |
| clear() | 清空所有键值对 |
| keyset() | 得到所有键的集合 |
| values() | 得到所有值的集合 |
| containsKey(Object key) | 判断是否包含某个键 |
| containsValue(Object value) | 判断是否包含某个值 |
| remove(Object key) | 根据键删除键值对 |
一种规范,常用于限制集合中元素的类型,省去遍历元素时转型的过程。
用法在定义集合时,在接收集合变量的数据类型后,写上<数据类型>。
集合类或接口<数据类型> 集合变量名 = new 集合实现类<>();
Collections集合工具类-
Collection是集合的根接口,定义了集合的方法
-
Collections是集合的工具类,定义了很多静态方法,直接通过类名调用
| 常用方法 | |
|---|---|
| Collections.shuffle(List list) | 打乱有序集合的元素顺序 |
| Collections.swap(List list,int i,int j) | 交换有序集合中i和j索引上的元素 |
| Collections.replaceAll(List list,Object oldVal,Object newVal) | 将有序集合中的旧元素替换为新元素 |
| Collections.fill(List list,Object obj) | 将有序集合使用obj填充 |
| Collections.rotate(List list,int distance) | 将最后diatance个元素放在最前 |
| Collections.sort(List list) | 对有序集合中的元素进行排序,元素必须实现了Comparable接口 |
| Collections.max(Collention list) | 得到有序集合中的最小元素,元素必须实现了Comparable接口 |
| Collections.min(Collention list) | 得到有序集合中的最大元素,元素必须实现了Comparable接口 |
Java中可以将本地硬盘中的文件(文件和目录)以对象的形式表示。
就能通过Java代码对本地文件进行读取或操作。
构造方法| 常用构造方法 | 说明 |
|---|---|
| File(String pathName) | 根据文件的完整路径创建对象 |
| File(String parent,String name) | 根据文件所在的父目录路径和自身文件名创建对象 |
| File(File parent,String name) | 根据文件所在的父目录文件对象和自身文件名创建对象 |
| 常用方法 | 说明 | 返回值 |
|---|---|---|
| exists() | 判断文件是否存在 | boolean |
| isFile() | 判断是否为文件 | boolean |
| isDirectory() | 判断是否为目录 | boolean |
| getName() | 获得文件名 | String |
| getPath() | 得到文件所在相对路径 | String |
| getAbsolutePath() | 得到文件所在绝对路径 | String |
| getParent() | 得到父目录的名称 | String |
| getParentFile() | 得到父目录的对象 | File |
| lastModified() | 得到文件最后一次修改时间对应的毫秒数 | long |
| length() | 得到文件的所占字节大小 | long |
| isHidden() | 判断文件是否为隐藏 | boolean |
| list() | 得到目录下的第一层子文件名的字符串数组 | String[] |
| listFile() | 得到目录下的第一层子文件名的文件数组 | File[] |
| delete() | 删除某个文件或空目录 | boolean |
| mkdir() | 创建一个空目录 | boolean |
| renameTo(File newFile) | 将原文件命名为新文件(新文件可以指定新位置) | boolean |
将内存中的数据存入到硬盘中,称为写write,也称为输出
将硬盘中的数据存入到内存中,称为写read,也称为输入
流的分类 InputStream字节输入流FileInputStream文件字节输入流 ObjectInputStream对象字节输入流(序列化)
OutputStream字节输出流FileOutputStream文件字节输入流 ObjectOutputStream对象字节输出流(反序列化)
Writer字符输出流FileWriter文件字符输出流 BufferedWrite缓冲字符输出流(包装流)
OutputStreamWriter字节输出流转换为字符输出流
Reader字符输入流FileReader文件字符输入流 BufferedReader缓冲字符输入流(包装流) InputStreamReader字节输入流转换为字符输入流(转换流)
按方向分类输入流:InputStream、Reader
作用:将硬盘中的数据读取到内存中
输出流:OutputStream、Writer
作用:将内存中的数据写入到硬盘中
按类型分字节流:InputStream、OutputStream
作用:适用于非文本类型,如图片、文件等的读写
字符流:Reader、Writer
作用:适用于文本类型,txt格式文件的读写
流的四个父类的特点
-
以上四个类都在java.io包下,都是抽象类,不能直接创建对象,要使用子类
-
都有close()方法,用于关闭流对象释放资源
-
输出流(OutputStream和Writer)都有flush()方法,用于将流中的数据冲刷到硬盘中
-
在使用输出流对象时,一定要调用flush()或close()方法,才能将数据写到硬盘中
-
-
输入流(InputStream和Reader)都有read()方法读取数据到内存中,输出流都有writer()方法写入数据到硬盘中
-
所有流类中,以Stream结尾的都是字节流,以Reader或Writer结尾的都是字符流
-
读取硬盘中的数据时,使用输入流;将数据写到硬盘中时,使用输出流
-
读取或写入文本文件时,使用字符流;读取或写入非文本文件时使用字节流
按字节读取本地文件,本地文件必须存在
构造方法| 常用构造方法 | 说明 |
|---|---|
| FileInputStream(String pathName) | 根据文件名创建文件字节输入流对象 |
| FileInputStream(File file) | 根据文件对象创建文件字节输入流对象 |
常用方法
| 常用方法 | 作用 |
|---|---|
| read() | 读取一个字节。返回读取到的字节本身 |
| read(byte[] b) | 按字节数组读取,返回读取到的字节数量,读取到的内容保存在字节数组中 |
| close() | 关闭流对象 |
按字节将数据写入到本地文件中,本地文件可以不存在
构造方法| 常用构造方法 | 说明 |
|---|---|
| FileOutputStream(String pathName) | 根据文件名创建文件字节输出流对象,写入内容时覆盖原内容 |
| FileOutputStream(String pathName,boolean append) | 根据文件名创建文件字节输出流对象,写入内容时追加在原内容之后 |
| FileOutputStream(File file) | 根据文件对象创建文件字节输出流对象,写入内容时覆盖原内容 |
| FileOutputStream(File file,booleanappend) | 根据文件对象创建文件字节输出流对象,写入内容时追加在原内容之后 |
| 常用方法 | 作用 |
|---|---|
| write(int i) | 写入一个字节 |
| writer(byte[] bytes) | 写入一个字节数组 |
| writer(byte[] bytes,int off,int len) | 写入字节数组中从off开始的len个字节 |
| flush() | 将数据冲刷到本地文件中 |
| close() | 关闭流对象 |
按字符读取文件。
构造方法| 常用构造方法 | 说明 |
|---|---|
| FileReader(String filename) | 根据文件名创建文件字符输入流对象 |
| FileReader(File file) | 根据文件对象创建文件字符输入流对象 |
| 常用方法 | 作用 |
|---|---|
| ready() | 判断是否还有下一个字符 |
| read() | 读取下一个字符,返回读取到的字符 |
| read(char[] chars) | 按字符数组读取字符,返回读取到的字符数量,读取到的字符保存在了字符数组中 |
| close() | 关闭流对象 |
按字符写入。
构造方法| 常用构造方法 | 说明 |
|---|---|
| FileWriter(StringfileName) | 按文件名创建字符输出流对象 |
| FileWriter(String fileName,boolean append) | 按文件名创建字符输出流对象,允许追加写入 |
| FileWriter(File file) | 按文件对象创建字符输入流对象 |
| FileWriter(File file,boolean append) | 按文件对象创建字符输出流对象,允许追加写入 |
| 常用方法 | 作用 |
|---|---|
| writer(String str) | 按字符串写入 |
| writer(char[] c) | 按字符数组写入 |
| writer(String str,int off,int len) | 按字符串写入,从off开始写入len个字符 |
| write(char[] c,int off,int len) | 按字符数组写入,从off开始写入len个字符 |
| flush() | |
| close() |
自带字符数组(缓冲区)的字符输入流。默认字符数组大小为8192,每次最多读取8192个字符在读取纯文本文件(txt或md等)时,首选该类。
构造方法| 常用构造方法 | 说明 |
|---|---|
| BufferedReader(Reader reader) | 创建一个带有缓冲区(字符数组)的字符输入流对象,默认缓冲区大小为8192。参数注意是一个Reader类型的对象,但Reader是一个抽象类,所以要使用其子类,如FileReader,然后在FileReader中定义要读取的文件信息。 |
| BufferedReader(Reader reader,int size) | 创建一个指定缓冲区(字符数组)大小的字符输入流对象 |
| 常用方法 | 作用 |
|---|---|
| ready() | 判断是否还有字符 |
| readLine() | 读取整行字符 |
| close() | 关闭流对象 |
自带字符数组(缓冲区)的字符输出流。
构造方法| 常用构造方法 | 说明 |
|---|---|
| BufferedWriter(Writer writer) | 创建一个带有缓冲区(字符数组)的字符输出流对象,参数为一个Writer对象,但Writer是一个抽象类,所以要使用其子类,如FileWriter对象,在FileWriter中定义要写入的文件 |
| BufferedWriter(Writer writer,int size) | 创建一个指定缓冲区(字符数组)大小的字符输出流对象 |
| 常用方法 | 作用 |
|---|---|
| writer(String str) | 写入一个字符串 |
| newLine() | 换行 |
| flush | 将输出流中的字符冲刷到文件中 |
| close() | 关闭流对象 |
序列化:将数据转换为文件的过程
被序列化的对象,必须要实现serializable接口
这个接口是一个特殊的接口,没有定义方法,知识给这个类打上标签,表示该类可以被序列化。
构造方法| 常用构造方法 | 说明 |
|---|---|
| ObjectOutputStream(OutputStreamos) | 创建一个对象字节输出流对象,参数为一个字节输出流对象,由于是抽象类,所以要使用其子类,如FileOutputStream对象,在其中定义要写入的文件。 |
| 常用方法 | 作用 |
|---|---|
| writeObject(Object obj) | 将一个对象写入到本地文件中 |
| close() | 关闭流对象 |
反序列化:将文件转换为对象的过程
构造方法| 常用构造方法 | 说明 |
|---|---|
| ObjectInputStream(InputStream is) | 创建一个对象字节输入流对象,参数为一个字节输入流对象,由于是抽象类,所以要使用其子类,如FileInputStream对象,在其中定义要读取的文件 |
| 常用方法 | 作用 |
|---|---|
| readObject() | 读取序列化后的文件,返回对象Object |
| close() | 关闭流对象 |



