java字节流字符流线程

字节输出流:
FileOutputStream
写入数据:write()
字节输入流:
FileInputStream
读取数据:read()

1、字符输入输出流:
1)字符输出流:FileWriter
2)字符输入流:FileReader

2、练习:
通过字符输入输出流进行文件的复制.

3、缓冲流:(高级流)
BufferedOutputStream 字节缓冲输出流
BufferedInputStream 字节缓冲输入流
缓冲流作用:
提高读取和写入数据的效率.

使用步骤:
	1)创建缓冲流对象
	例如:
		字节缓冲输入流对象 对象名 = new 字节缓冲输入流(字节输入流对象);
		字节缓冲输出流对象 对象名 = new 字节缓冲输出流(字节输出流对象);
	2)读取或者写入数据:
			读取数据:通过字节缓冲输入流对象名.read();
			写入数据:通过字节缓冲输出流对象名.writer();
	3)释放资源
	
	练习:
		分别测试低级流文件复制和高级流文件复制的时间.
		要求:
			低级流: FileOutputStream    FileIutputStream
			高级流: BufferedOutputStream   BufferedIutputStream
	
	字符缓冲流:
		BufferedReader		字符缓冲输入流
		BufferedWriter			字符缓冲输出流
	
	创建字符高级流对象:
		BufferedReader br = new BufferedReader(new FileReader("文件路径"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("文件路径"));

4、多线程:
并行:指两个或者多个事件在同一时刻发生.(同时发生)
并发:指两个或者多个事件在同一时间段内发生的.

		进程:是指一个在内存中运行的应用程序.是一个独立的单元,一个进程中至少有一个线程.
		线程:是指执行进程中任务功能.
		
		实现多线程两种方式:
		1)继承Thread类
			使用步骤:
					a.自定义一个类型去继承Thread
					B.手动添加run()方法,进行重写   (run方法的作用就是写线程功能代码的)
					c.创建自定义线程类对象,然后开启线程
					
					例如:
							class 类名 extends Thread{
								public void run(){
									功能代码;
								}
							}
							自定义类名 对象名 = new 自定义类名()
							对象名.start().
							
			2)实现Runnable接口
				使用步骤:
						a.自定义实现类去实现Runnable接口
						b.重写run方法
						c.需要通过创建线程类的有参构造,把Runnable接口的实现类对象传进去.
						d.开启线程.
					例如:
							class 实现类名 implements Runnable{
								public void run(){
									功能代码;
								}
							}
							
							new Thread(实现类对象).start();
				3)匿名内部类实现多线程的方式:
					例如:
					Runnable r=new Runnable(){
						public void run(){
									功能代码;
								}
					};
					new Thread(r).start();

5、通过同步代码块解决线程安全问题:
同步代码块固定语法:
synchronized(同步锁对象){
需要同步操作的方法
}
注意:
1)对象的同步锁只是一个概念,可以理解为在对象上标记了一个锁.
2)同步锁可以是任意类型.
3)多个线程对象,要使用同一把锁.

原文地址:https://www.cnblogs.com/Pythons/p/10932285.html