IO流的总结
一 .io流的概念
通过数据流、序列化和文件系统提供系统输入和输出。
2. I => Input 输出---将数据源读到内存中;
O => Output 输出---将内存数据写到硬盘中。
数据流
“流”就像一根管道,数据在管道中的走向就叫数据流。
作用 用来处理设备之间的数据传输。
电脑中文件的展示形式: 文件和文件夹
操作方式: 读和写
- IO流的体系
字节流:字节流是用来处理二进制(0、1)数据,它是按字节来处理的。
流
| |--InputStream(输入流)
| | |--FileInputStream --文件输入流 这些类的作用是什么?什么时候用?
| | |--BufferedInputStream --缓冲输入流
|--字节流| |--ObjectInputStream --对象输入流
| | |--DataInputStream --数据输入流
| | |--ByteArrayInputStream --内存输入流
| |--OutputStream(输出流)
| |--FileOutputStream --文件输出流
| |--BufferedOutputStream --缓冲输出流
| |--ObjectOutputStream --对象输出流
| |--DataOutputStream --数据输出流
| |--ByteArrayOutputStream --内存输出流
| |--PrintOutputStream --打印输出流
|
|--字符流|--Reader(输入流)
| |--FileReader --文件输入流
| |--BufferedReader --缓冲输入流
|--Writer(输出流)
|--FileWriter --文件输出流 |--BufferedWriter --缓冲输出流
InputStreamReader --字节转字符输入流
OutputStreamWriter类 --字节转字符输出流
字符流:
总结:
所有以Stream结尾的都是字节流
所有以Reader或者Writer结尾的都是字符流
IO流就这么简单:
第1:明确用哪种流?字节流?字符流?
第2:输入还是输出?站的角度
第3:明确操作的介质
硬盘----File类 FileinputStream FileOutputStream
控制台--System.in System.out
数组----ByteArrayInputStream ByteArrayOutputStream
网络----Socket
序列化和反序列化 ObjectInputStream ObjectOutputStream
第4:是否需要提高效率?是否需要转换?
第5:方法
字节输入流 FileInputStream read()
字节输出流 FileOutputStream writer()
字符输入流 Reader read() readLine()
字符输出流 Writer writer()
序列化 writerObject() readObject()
//模拟scanner
//通过流的方式
// InputStream is = System.in;
// byte[] by= new byte[1024];
// System.out.println("请输入:");
// int n = is.read(by); //scanner的接收代码 .next()
// String str =new String(by,0,n);
// System.out.println("你输入字符串是:"+str);
三、URL 类
Url :统一资源定位符,它是互联网“资源”的指针。 127.0.0.1 localhost
URL url=new URL(“ 网址 ”);
Url.getHost(); 获得对象的主机名
Url.getDefaultPort(); 获得对象的默认端口号
Url.getPath(); 获得路径部分
Url.getPort 获得端口号
Url.getFile 获得文件名
Url.openStream 打开到此URL的连接,并返回一个用于从该连接读入的 InputStream。
下载
利用URL类进行网上下载资源,比如文字、图片、视频。
字节流案例:
URL url=new URL("http://www.baidu.com/img/bd_logo1.png"); //指定下载的图片地址
InputStream is=url.openStream(); //打开服务器的读入连接
BufferedInputStream bis=new BufferedInputStream(is);
FileOutputStream fos=new FileOutputStream("e:\\temp\\baidu.png"); //创建文件输出流,用于将接收到的图片流存入该文件,注意文件的扩展名最好保持一致。
BufferedOutputStream bos=new BufferedOutputStream(fos);
int n=0;
while((n=bis.read())!=-1){ //边读
bos.write(n); //边写
}
bos.close();
bis.close();
System.out.println("下载完毕");
字节流转字符流
1. InputStreamReader 字节输入流转字符输入流
OutputStreamWriter 字节输出流转字符输出流
IntoutStreanReader类
作用: 将字节流转换成字符流,是字节流通向字符流的桥梁。
- 网络通讯层
三要素:IP地址、端口号、传输协议
- Tcp协议与Udp协议
两者的区别:
TCP:连接 == 打电话 == 双方建立通道,信息在通道中传送,双方响应,信息传递可靠性高,但资源开销大,独占一个通道,在断开连接前不能建立另一个连接(两人打电话,第三人不能打入)。
UDP:无连接 == 寄信 == 就是发送信息,没有开始与结束,一次性传递,也不需要接受方响应,无法保证信息传递的可靠性(寄了,但不一定能收到)。
- 网络聊天
套接字 Socket:(面向TCP)
其用于标识客户端请求的服务器和服务,源IP地址和目的IP地址以及源端口号的组合称为套接字
构造方法:Socket(InetAddress address, int port)
//创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
例:Socket sk=new Socket(InetAddress.getByName("127.0.0.1"), 8866);
getInetAddress(); 远程服务端的IP地址
getPort(); 远程服务端的端口
getLocalAddress(); 本地客户端的IP地址
getLocalPort(); 本地客户端的端口
getInputStream(); 获得输入流
getOutputStream(); 获得输出流
- 多线程
一、进程的概念
1.进程与线程
- 进程==就是正在进行的程序。
CPU在某一段时间只处理一个程序,程序也是一个进程,当程序结束,进程也消失。
B.线程==就是程序中的一个执行路径(控制单元)
线程在控制着进行的执行。
它是真正的执行者
C.为什么需要多线程?
大型应用程序都需要高效地完成大量任务,其中使用多线程就是一个提高效率的重要途径。
D.进程与线程的关系:
一个进程中至少包含有一个或多个线程。
- 多线程存在的意义
多线程可以让我们程序部分可以产生同是运行的效果,各玩个的。提高效率是其次,主要是能让多段代码同时执行。
示例:得到当前线程名
System.out.println(Thread.currentThread().getName);
- 多线程的目的
为了最大限度的利用CPU资源。
- 线程调度
按照特定的机制为多个线程分配CPU的使用权
分时调度 抢占式调度