Io流
流的分类
- 输入流:只能从中读取数据,而不能向其写入数据
输出流:只能向其写入数据,而不能从中读取数据 - 字节流:二进制,可以处理一切文件包括纯文本、doc、音频、视频等
字符流:文本文件,只能处理纯文本,全部为可见字符 - 节点流:包裹源头,离源头最近
处理流:增强功能、提供性能
InputStream/Reader:所以输入流的基类,前者是字节输入流,后者是字符输入流
OutputStream/Writer:所以输出流的基类,前者是字节输出流,后者是字符输出流
转换流
- 解码:将二进制通过解码字符集转为字符
- 编码:将字符通过编码字符集转为二进制
- InputStreamReader:将字节输入流转化为字符输入流
- OutputStreamWriter:将字节输出流转化为字符输出流
其他流
一、节点流
1、字节数组节点流(读取、写出字节数组)
输入流:ByteArrayInputStream 其中close()为无效关闭
输出流:ByteArrayOutputStream 新增了toByteArray()方法用来获取数据
二、处理流
1、基本类型+String 保留数据和类型
输入流:DataInputStream 新增readXxx()方法、其中字符串为UTF
输出流:DataOutputStream 新增writeXxx()方法
读取数据操作与写入数据操作顺序一致,必须存在才能读取,不一致,数据会存在问题
2、引用类型(数组也可以序列化)
反序列化:输入流、ObjectInputStream 新增readObject()
序列化:输出流、ObjectOutputStream 新增writeObject()
注意:1、先序列化后反序列化,反序列化顺序必须与序列化一致
2、不是所有的对象都可以序列化,类必须实现java.io.Serializable接口,也不是所有的属性都需要序列化,不需要序列化的信息用transient修饰
线程
线程、进程与程序
名称 | 代表 |
---|---|
程序 | 一个任务、指令集、静态概念 |
进程 | 运行中的程序、操作系统调度程序、动态概念 |
线程 | 程序执行流、在进程内的多条执行路径 |
进程与线程的区别
区别 | 线程 | 进程 |
---|---|---|
单位 | 调度和执行的单位 | 资源分配的单位 |
占用内存 | 一个进程中的线程占用同一个内存 | 每个进程都拥有独立的内存 |
组成 | 必须有一个父进程 | 可以拥有多个线程 |
线程被称作轻量级进程,线程是进程的执行单位