IO流
IO流:用于读写文件中的数据(可以读写文件,或网络中的数据...);
File:表示系统中的文件或者文件夹的路径;
- 注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据;
I:input:读;
O:output:写;
流:像流水一样传输数据;
IO流按照流向可以分为:
输入流:读取
输出流:写出
IO流按照操作文件的类型可以分为:
字节流:可以操作所有类型的文件
字符流:只能操作纯文本文件
/ / 纯文本文件:windows自带的记事本打开能读懂;
字节流
OutputStream
OutputStream是一个抽象类,由很多子类,下面我们将学习它的FileOutputStream和FileInputStream;
FileOutputStream
操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。
书写步骤:
- 创建字节输出流对象
- 写数据
- 释放资源
FileOutputStream写数据的3种方式
1.FileOutputStream的作用
可以把程序种的数据写到本地文件上面,是字节流的基础
2.书写步骤
创建对象,写出数据,释放资源
3.散步操作的细节
创建对象:文件存在,文件不存在,追加写入
写出数据:写出整数,写出字节数组,换行写
释放资源:关闭通道
FileInputStream
操作本地文件的字节输入流,可以把本地文件中的数据读到程序中来
书写步骤
- 创建字节输入流对象
- 读数据
- 释放资源
FileInputStream书写细节
1.创建字节输入对象;细节1:如果文件不存在,就直接报错
2.读取数据
细节1:一次读取一个字节,读出来的是数据在ASCII上对应的数字;
细节2:读到文件末尾了,read方法返回-1;
循环读取
拷贝文件
我们这里发现如果拷贝的视频大小比较大的话运行的时间很久,那是因为FileInputStream一次只读写一个字节
FileInputStream一次读多个字节
缓冲流
转换流
序列化流和反序列化流
字节打印流
b
多线程
- 说起进程,就不得不说下程序,程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
- 而进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位
- 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。
注意:很多个线程是模拟出来的,真正的多线程指的是有多个CPU,即多核,如服务器。如果是模拟出来的多线程,即在一个CPU的情况下,在同一个时间点,CPU只能执行一个代码,因为切换的很快,所有就有同时执行的错觉;
1.线程的创建
有三种创建方式:
1.继承Thread类
重写run方法,run方法里面就是该线程要执行的方法
调用该线程时要调用start方法,不能直接调用run方法
2.实现Runnable接口的方式进行实现
小细节:在MyRun类中不能直接调用getName方法,要使用Thread类的currentThread静态方法来得到当前的对象,再调用getName方法获得线程名;
3.实现Callable接口
最后使用git方法获得线程运行的结果
多线程中的常用成员方法
细节:如果没有给线程设置名字,他们是有默认的名字的
格式:Thread-X X是数字从0开始;
static Thread currentThread() 获取当前线程的对象;
细节:
当JVM虚拟机启动后,会自动的启动多条线程
其中有一条线程叫做main线程
他的作用就是去调用main方法,并执行里面的代码
在以前,我们写的所有的代码,其实都是运行在main线程里面的
static void sleep(long time) 让线程休息指定的时间,单位为毫秒
细节:
1.哪条线程执行到这个方法,那么哪条线程就会在这里停留对应的时间
2.方法的参数:就表示睡眠的时间,单位毫秒
1 秒 = 1000 毫秒
3.当时间到了之后,线程就会自动的醒来,继续执行下面的其他代码
final void setDaemon(boolean on) 设置为守护线程
细节:
当其他的非守护线程执行完毕后,守护线程会陆续结束
通俗易懂:
当女神线程结束了,那么备胎也没有存在的必要了;
重点:
在聊天室里面,当你在实现传输文件的时候,要将传输文件的线程设置为守护线程,因为当你在传输文件的时候将聊天室关闭了,那么文件传输也就没有继续进行下去的必要了;
同步代码块
把操作共享数据的代码锁起来
格式 :
synchronized (锁){
操作共享数据的代码;
}
特点1:锁是默认打开的,有一个线程进去了,锁自动关闭
同步方法
就是把synchronized关键字加到方法上面
格式:
修饰符 synchronized 返回值类型 方法名(方法参数){
..........;
}
Java中线程的其中状态: