JavaWeb---IO基础知识

将数据从输入设备拿到内存,我们称之为input , 将数据从内存输出到外设,我们称之为output ,简称这个过程为IO,且input,output 是站在java程序的角度说的。

1. 分类
  1. 阻塞式的IO
    ① 网络IO:网络数据的操作
    ② 文件IO:本地文件的操作
  2. NIO(New IO):同步非阻塞式IO
2. 流
  1. 流: 数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象分为各种类,方便更直观的进行数据操作。
  2. 输入/ 输出流: 根据数据的流向不同,输入就是将数据从各种输入设备中读取到内存中。输出则正好相反,是将数据写入到各种输出设备。不同数据的处理(输入/输出),设备划分也不同。
    在这里插入图片描述
    java程序角度: 读取本地文件,硬盘是输入设备;写数据时,硬盘是输出设备。
    硬盘角度: java程序读取本地文件时,硬盘是输出设备;写数据时,硬盘是输入设备。
  3. 流的操作只能执行一次。
  4. Java中的IO流的分类:
    ① 字节、字符流:Stream字节流,Writer、Reader字符流;
    ② 输入、输出流:Input输入、Output输出、Writer输出、Reader输入;
    ③ 文件:带File的IO类,作为文件操作的IO流;
    ④ 特殊的流:Print表示打印输出到某个设备,Scanner表示接收某个设备的输入(接收控制台输入时,从System.in键盘作为输入设备来的),StringWriter/StringReader(了解);
    ⑤ 二进制数组的操作: ByteArray;
    ⑥ java对象:Object;
  5. java 中的IO流,是可以包裹其他IO流的。
  6. 字节流、字符流对比:
    ① 字节流操作的基本单元是字节;字符流操作的基本单元为Unicode码元。
    ② 字节流在操作的时候本身不会用到缓冲区的,是与文件本身直接操作的;而字符流在操作的时候使
    用到缓冲区的。
    ③ 在使用字节流操作中,即使没有关闭资源(close方法),也能输出;而字符流不使用close方法的
    话,不会输出任何内容。
  7. 字节字符转换流:
    在进行转换的时候我们需要用到OutputStreamWriterInputStreamReader
    字节流转换为字符流,需要使用字节字符转换流、文件编码格式。

输入的字节流转换字符流

public class TestDemo {
public static void main(String[] args) {
	// 创建字节流对象 System.in 代表从控制台输入
	InputStream in = System.in;
	// 创建字符流对象
	BufferedWriter bw = null;
	BufferedReader br = null;
	try {
		// 实例化字符流对象 通过 InputStreamReader 将字节输入流转化成字符输入流
		br = new BufferedReader(new InputStreamReader(in));
		//br = new BufferedReader(new InputStreamReader(in,"GBK"));
		bw = new BufferedWriter(new FileWriter("a.txt"));
		// 定义读取数据的行
		String line = null;
		// 读取数据
		while ((line = br.readLine()) != null) {
		// 如果输入的是"exit"就退出
		if("exit".equals(line)){
		break;
	}
	// 将数据写入文件
	bw.write(line);
	// 写入新的一行
	bw.newLine();
	// 刷新数据缓冲
	bw.flush();
	}
} catch (Exception e){
	e.printStackTrace();
} finally {
	// 释放资源
	try {
	if(bw != null)
	bw.close();
	if (br != null)
	br.close();
	} catch (IOException e){
	e.printStackTrace();
    }
   }
  }
 }

输出的字符流转换成字节流

public class TestDemo {
public static void main(String[] args) {
   // 定义字节输出流的对象System.out
	OutputStream out = System.out;
	// 定义字符流的对象
	BufferedReader br = null;
	BufferedWriter bw = null;
		try {
		//通过OutputStreamWriter将字符转流换为字节流对象
		bw = new BufferedWriter(new OutputStreamWriter(out));
		//bw = new BufferedWriter(new OutputStreamWriter(out,"GBK"));
		br = new BufferedReader(new FileReader("a.txt"));
		// 定义读取行的字符串
		String line = null;
		// 读取数据
		while ((line = br.readLine()) != null) {
		// 输出到控制台
		bw.write(line);
		// 新的一行
		bw.newLine();
		// 刷新缓冲
		bw.flush();
		}
		} catch (Exception e) {
		e.printStackTrace();
		} finally {
		// 释放资源
		try {
		if (bw != null)
		bw.close();
		if (br != null)
		br.close();
		} catch (Exception e) {
		e.printStackTrace();
     }
   }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值