*IO流
定义
IO指的是Input/Output,IO流:输入输出流。 统称为数据流。
-流向划分: 1.输入流[Input] 2.输出流[Output]
-数据传输单位方式划分: 1.字节流(InputStream|OutputStream) 2.字符流(Reader|Writer)
按功能分:1.节点流:用于直接操作目标设备的流
2.处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更强大、灵活的读写功能。
File: 操作文件或目录各项属性和文件或者目录的创建删除
注意:IO流对象资源不会被垃圾回收器回收,所有一定记关闭IO,释放内存资源。
1.字节流: 图片,视频,音频等原始字节文件。
-FileInputStream
输入流如果文件不存在,则抛出FileNotFoundException。
-FileOutputStream
输出流如果文件不存在,则自动创建文件然后写入数据。
2.字符流
-FileReader(输入流)
-FileWiter(输出流)
*java.IO
-File: 代表文件或者目录对象
作用:操作文件或者目录属性以及创建和删除等操作。
-输入输出流(Input/Output)
流向划分:
输入流/输出流
读写方式划分:
字节流(InputStream|OutputStream)/字符流(Reader/Writer)
-文件字节流(byte)
FileInputStream
FileOutputStream
-文件字符流(char)
FileReader
FileWriter
-缓冲流
BufferedReader
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取
构造函数:
BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
BufferedWriter
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入
构造函数:
BufferedWriter(Writer out)
创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)
创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
BufferedInputStream
BufferedOutputStream
-内存流: 当输出流的目的,和输入流的源是内存时,这样的流称之为内存流
ByteArrayOutputStream
ByteArrayInputStream
CharArrayReader
CharArrayWriter
-转换流
字节流(1) -> 字符流(2)
InputStreamReader
OutputStreamWriter
-打印流(输出流)
PrintStream: 为另一个输出流添加了功能,即能够方便地打印各种数据值的表示.
PrintWriter:将对象的格式表示打印到文本输出。
-对象流: 对象流没有字符输入/输出流
注意:
1.序列化不会写出任何不实现java.io.Serializable接口的对象的字段(Serializable 默认的序列化)
2.实现Externalizable接口允许对象完全控制对象的序列化表单的内容和格式。
调用Externalizable接口writeExternal和readExternal的方法来保存和恢复对象的状态
3.static 或者 transient 修饰的字段是不能够被序列化
ObjectInputStream: 字节流 (对象信息持久化) -> 程序中 -> java对象信息 反序列化
ObjectOutputStream: 对象信息 -> 字节流 (对象信息持久化) 序列化
ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。
可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。
IO流思维导图:
*java网络编程
客户端 -> 服务器
-TCP
-UDP
URL: 统一资源定位符号
Class URL表示统一资源定位符,指向万维网上的“资源”的指针。
资源可以像文件或目录一样简单,或者可以是对更复杂的对象的引用,例如对数据库或搜索引擎的查询。
组成: 【协议+主机地址+端口号+资源路径+查询参数+锚点】
方法:
String getFile()
获取此 URL的文件名。
String getHost()
获取此 URL的主机名(如适用)。
String getPath()
获取此 URL的路径部分。
int getPort()
获取此 URL的端口号。
String getProtocol()
获取此 URL的协议名称。
String getQuery()
获取此 URL的查询部分。
String getRef()
获取此的锚定(也称为“参考”) URL 。
InetAddress: Internet协议(IP)地址
方法:
byte[] getAddress()
返回此 InetAddress对象的原始IP地址。
static InetAddress[] getAllByName(String host)
给定主机的名称,根据系统上配置的名称服务返回其IP地址数组。
static InetAddress getByAddress(byte[] addr)
给出原始IP地址的 InetAddress对象。
static InetAddress getByAddress(String host, byte[] addr)
根据提供的主机名和IP地址创建InetAddress。
static InetAddress getByName(String host)
确定主机名称的IP地址。
String getCanonicalHostName()
获取此IP地址的完全限定域名。
String getHostAddress()
返回文本显示中的IP地址字符串。
String getHostName()
获取此IP地址的主机名。
static InetAddress getLocalHost()
返回本地主机的地址。
-TCP编程
TCP: 传输控制协议
特点: 面向连接,有序的,可靠的,以字节流的方式传输数据。
作用类:
服务器: ServerScoket
客户端: Socket
-UDP编程
UDP: 用户数据报协议
特点: 面向无连接,不可靠的,无序的,以数据包(DatagramPacket)的方式发生数据。
传输效率高。
DatagramSocket:通信类
DatagramPacket:数据报包类。
*进程和线程
每个独立执行的程序称为进程。
线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源,
多个线程共享内存,从而极大地提高了程序的运行效率。
进程与线程的关系
> 进程的产生,肯定会产生至少一个以上的线程;
>
> 进程关闭,该进程内的线程会全部销毁;
>
> 线程销毁,进程未必会关闭
多线程,指的是一个进程内的多个任务并发执行。
多线程的好处:可以更高效地利用CPU资源,同时,让固定流程的程序更加灵活;
注意:多个线程之间,谁先抢占到资源,谁就先执行。
*多线程实现
1.继承Thread类
2.实现Runnable接口
3.实现Callable接口
4.线程池
-Runnable和Callable的区别:
(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以,因为run方法本身没有抛出异常,
所以自定义的线程类在重写run的时候也无法抛出异常
(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。
它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。
*多线程生命周期
*线程常用方法
static Thread currentThread() :返回对当前正在执行的线程对象的引用。
String getName() :返回此线程的名称。
void setName(String name) :将此线程的名称更改为等于参数 name 。
long getId() :返回此线程的标识符。
int getPriority() :返回此线程的优先级。
void join() :等待这个线程死亡。
static void sleep(long millis)
使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。
static void yield() 对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。 (线程礼让)