java io 缓存_java——IO讲解(字符流和缓冲区的使用)

在java中字节流主要是对一些视频,音频,图片进行操作,而字符流则是对一些字符操作。

和字节流一样,字符流也有两个基类:

字符输出流:“Writer”

字符输入流:“Reader”

通过一个实现类FielWriter和FielReader可以实现字符流的输入输出操作。

先介绍一下Writer的相关方法:

·public void write(int c) throws IOException

【将内容写入指定的文件,每次写入一个字符,该数据类型就是一个ASC码,根据该ASC码就可以找到对应的字符】

·public void write(char[] cbuf) throws IOException:

【每次写入一个字符数组的内容】

·public void write(String str) throws IOException:

【每次直接写入一个字符串】

示例:

package com.zhaoqiang.writer;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

import java.util.Iterator;

public class Demo1 {

public static void main(String[] args) throws IOException {

File f = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");

if (!f.getParentFile().exists()) {

f.getParentFile().mkdirs();

f.createNewFile();

}

// 创建字符流输出对象

Writer out = new FileWriter(f);

String str ="测试数据";

// 获取字符数组

char[] ch = str.toCharArray();

// 第一种方法

for (char c : ch) {

out.write(c);

}

// 第二种方法

// out.write(ch);

// 第三种方法

// out.write(str);

out.flush();

out.close();

}

}

flush()是刷新缓存里面的数据.

下面介绍Reader里面的相关方法:

·public int read() throws IOException:

【每次读取一个字符,将字符的ASC返回,如果读取到最后返回-1】

·public int read(char[] cbuf) throws IOException

【每次读取一个字符数组的内容,返回的吗每次读取的数据的长度,

如果读取到最后返回-1】

·public abstract int read(char[] cbuf, int off, int len)

【每次读取指定的字符数组的指定的内容,

off表示要保存的数组的起始下标

len表示要保存的数据长度】

示例:

package com.zhaoqiang.Reader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

public class Demo1 {

public static void main(String[] args) throws IOException {

File f = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");

if (!f.getParentFile().exists()) {

f.getParentFile().mkdirs();

f.createNewFile();

}

// 创建一个输入流对象

Reader re = new FileReader(f);

int len = 0 ;

// 第一种:输入一个字符

// while ((len = re.read()) != -1) {

// System.out.println((char)len); // 一个一个字符输出

// }

//

// 第二种

char[] ch = new char[1024];

while((len = re.read(ch)) != -1){

System.out.println(new String(ch,0,len));

}

// 输入指定长度的字符

re.read(ch, 0, 10);

re.close();

}

}

缓冲区:BufferedOutputStream,BufferedInputStream;

示例:

package com.zhaoqiang.buffer;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class Demo1 {

public static void main(String[] args) throws IOException {

File f = new File("F:"+File.separator+"Demo"+File.separator+"12.jpg");

File of = new File("D:"+File.separator+"Demo"+File.separator+"2.jpg");

// 创建字节输入流缓冲区

BufferedInputStream bi = new BufferedInputStream(new FileInputStream(f));

// 创建字节输出流缓冲区

BufferedOutputStream bs = new BufferedOutputStream(new FileOutputStream(of));

byte[] by = new byte[1024];

int len = 0;

while((len = bi.read(by)) != -1){

bs.write(by, 0, len);

bs.flush();

}

bs.close();

bi.close();

}

}

字符流缓冲区:BufferedReader,BufferedWriter;

示例:

package com.zhaoqiang.buffer;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Demo2 {

public static void main(String[] args) throws IOException {

// 目的文件

File f = new File("F:"+File.separator+"Demo"+File.separator+"test.txt");

// 源文件

File of = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");

// 字符输入流缓冲区

BufferedReader br = new BufferedReader(new FileReader(of));

// 字符输出流缓冲区

BufferedWriter bw = new BufferedWriter(new FileWriter(f));

String str = "";

// 第二种方法,一行读取

while((str = br.readLine()) != null){

bw.write(str);

bw.newLine();

bw.flush();

}

// 第一种方法,单个字符读取

// int len = 0;

// while((len = br.read())!=-1){

// bw.write(len);

// bw.flush();

// }

bw.close();

br.close();

}

}

对于字符流缓冲区,和字节流缓冲区他们的底层实现还是使用的是java提供的输入输出流方法。只是添加一个缓冲区可以提高输入输出之间的传输效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值