I/O流

来源:互联网 发布:linux分析日志 编辑:程序博客网 时间:2024/06/05 19:21

I/O流

"i"  就是指intput,输入的意思。
"o" 就是指output,输出的意思。

在内存的角度定义:
输入:从硬盘到内存。
输出:从内存到硬盘。

传输的介质分为两种,一种是字节流,一种是字符流。
字节流(Byte),顾名思义,每传输一次就只是传输一个字节。
字节流有一个缺点。
字符:1个英文=1byte      1个中文=2byte
那么一个中文用字节传输就会将其强行拆开,那么就会出现乱码,
虽然到TXT格式的文本里面有会重新组合出来,但总也不太好的。
文件字节输入输出:FileInputStreamFileOutputStream
文件的复制粘贴:
//构建文件输入流对象FileInputStream fis = new FileInputStream(srcFileName);//构建文件输出流对象FileOutputStream fos = new FileOutputStream(destFileName);//读取文件int data = fis.read();while(data!=-1){//写入到输出流中fos.write(data);data = fis.read();//递归继续读取}System.out.println("文件复制粘贴成功!。。。。");//关闭流fis.close();fos.close();

字符流(Cher),
字符流就没有字节流的缺点。
每一个英文字母和中文子都为一个字符,那么传输的时候就不会出现乱码。
虽然两者有差异,但在实际使用的时候也要选择适合的来使用。
还有要记得在使用完流以后记得关掉流(close)。

在使用流的时候还有节点流和处理流,处理流又叫包装流。
IO流,相当于在两个文件中间插上一条水管。
处理流就是说把水管包装的大些,让水流跟大。
两个水管的接口就是节点流,而中间的管子就是处理流。
输入:
节点流:
// 创建一个字节文件输入流FileInputStream fis = new FileInputStream("sdn");
输入的处理流(包装流):
// 包装:将字节的文件输入流包装成字符流InputStreamReader isr = new InputStreamReader(fis);// 包装:将字符流包装成缓冲流BufferedReader br = new BufferedReader(isr);
输出:
// 输出流包装FileOutputStream fos = new FileOutputStream("ssddnn");
输出的处理流(包装流):
OutputStreamWriter osw = new OutputStreamWriter(fos);BufferedWriter bw = new BufferedWriter(osw);
循环输入输出,实现复制粘贴。
String line = br.readLine();while (line != null) {// System.out.println(line);bw.write(line);bw.newLine();line = br.readLine();}
关闭输出、输入流:
br.close();isr.close();fis.close();bw.close();osw.close();fos.close();
创建一个字节流数组来保存一次读取的字节,然后一次性写出。
//创建一个字节流
InputStream ins = new FileInputStream("test.txt");
// 创建字节数组byte[] bytes = new byte[512];int v = ins.read(bytes);while (v != -1) {// 把数组内容转化为字符串String str = new String(bytes, 0, v);System.out.println(str);v = ins.read(bytes);}
用数组的也有缺点。
创建一个长度为512的数组,那么如果一个中文字是由第512个字节个第513个字节组合起来的,那么程序也会强行拆开,出现乱码。
那么就可以用到字符数组
FileWriter fw = new FileWriter("test11.txt");String str = "中华人民共和国";// 把字符串转化为字符数组char[] chars = str.toCharArray();fw.write(chars);fw.flush();fw.close();
br.close();isr.close();fis.close();bw.close();osw.close();fos.close();
0 0
原创粉丝点击