BufferedReader和BufferedWriter

字符流的缓冲区:缓冲区的而出现提高了对数据的读写效率
对应类:BufferedWriter  BufferedReader
缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。实际上BufferedReader和BufferedWriter是对FileReader和FileWriter的装饰模式
BufferedWriter:

bufw.newLine();

public class BufferedWriterDemo {

    private static final String LINE_SEPARATOR =System.getProperty("line.separator");

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

        FileWriter fw= new FileWriter("buf.txt");
//为了提高效率。使用字符流的缓冲区
//创建了一个字符写入流的缓冲区对象,并和指定缓冲流对象相关联
BufferedWriter bufw=new BufferedWriter(fw);
//使用缓冲区的写入方法将数据先写入缓冲区中
//bufw.write("afdafdsdgg"+LINE_SEPARATOR+"fggag");
bufw.write("xifasf2");
bufw.newLine();
bufw.write("xifasf");
for (int x = 0; x <4; x++) {
bufw.write("xifasf");
bufw.newLine();
}
//使用缓冲区的刷新方法将数据刷到目的地中
//bufw.flush();
//关闭缓冲区。其实关闭的就是缓冲的流对象
bufw.close();
}
}

BufferedReader:

line=buf.readLine()

public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr= new FileReader("buf.txt");
BufferedReader buf=new BufferedReader(fr);
String line=null;
while((line=buf.readLine())!=null){
System.out.println(line);
}
buf.close();
}

练习: 自定义的读取缓冲区。其实就是模拟BufferedReader。

分析:
* 缓冲区中无非就是封装了一个数组
* 并对完提供了更多的方法对数组进行访问
* 其实这些方法最终操作的都是数组的角标
* 缓冲的原理:
* 其实就是从源中获取一批数据装进缓冲区中
* 在从缓冲区中不断取出一个一个数据
* 在此次取完后,再从源中继续取一批数据进缓冲区
* 当源中的数据取光时,用-1作为结束标记

public class MyBufferedReader {
private FileReader r;
//定义一个数组作为缓冲区
private char[] buf=new char[1024];
//定义一个指针用于操作这个数组中的元素。当操作到最后一个元素后,指针归0;
private int pos=0;
//定义一个计数器用于记录缓冲区的数据个数。当数据减到0,就从源中继续读取数据到缓冲区中。
private int count=0; MyBufferedReader(FileReader r){
this.r=r;
} public int myRead() throws IOException{
if(count==0){
count=r.read(buf);
pos=0;
}
if(count<0){
return -1;
}
char ch=buf[pos++];
count--;
return ch; } public String myReadLine() throws IOException{
StringBuilder sb=new StringBuilder();
int ch=0;
while ((ch=myRead())!=-1){
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
//将缓冲区中读到的字符,存储到缓存行数据的缓存区中。
sb.append(ch);
}
if(sb.length()!=0){
return sb.toString();
}
return null;
} }

IO流(二)__BufferedReader和BufferedWriter的更多相关文章

  1. Java学习之路(十二):IO流<二>

    字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...

  2. Java IO流(二)

    目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...

  3. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  4. IO流二

    1 数据流(了解) 1.1 概述 为了方便的操作java语言的基本数据类型和String类型的数据,可以使用数据流. 数据流的分类: DataInputStream DataOutputStream ...

  5. IO流(二)

    一:字符流 字符输入流 写入文件字符流 import java.io.FileWriter; import java.io.IOException; //fileWriter public class ...

  6. IO流---字符流(FileWriter, FileReader ,BufferedWriter,BufferedReader)

    IO   Input  Output IO流用来处理设备之间的数据传输. java对数据的操作是通过流来实现的. 流按流向分:输入流,输出流     是相对内存而言的.把硬盘的数据读取到内存中就是输入 ...

  7. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  8. IO流(二)

    二.File类 概述 文件和目录路径名的抽象表示形式 构造方法 public File(String pathname) public File(String parent,String child) ...

  9. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

随机推荐

  1. angular利用ui-router登录检查

    angular利用ui-router登录检查 SAP都会有这个问题,session过期或者页面被刷新的情况下应该进入登录页. 监听ui-router的satte事件可以实现当state切换的时候检查登 ...

  2. Sublime Text配置Python开发利器

    Sublime Text配置Python开发利器 收好了 自动提示 jedi 代码格式化 Python PEP8 autoformat 如果还需要在shell中搞搞研究的话,ipython将是很好的选 ...

  3. 在configure distribution时遇到错误,不能打开sql agent

    今天在配置Distribution时,遇到一个错误,不能打开sql agent,详细错误信息如下: SQL Server blocked access to procedure 'dbo.sp_set ...

  4. 如何下载android官网Lib包

    例如:https://dl-ssl.google.com/android/repository/sources-23_r01.zip

  5. 微软Team Foundation Service 的Scrum模板中的Feature和Backlog Items 的区别【转载】

    Features help us plan work better in Team Foundation Service Scrum process [原文:http://www.nsilverbul ...

  6. gulp-rev:项目部署缓存解决方案----gulp系列(六)

    引言: 前端工程化部署比较重要考虑的一个问题是缓存 ,可以参考 <变态的静态资源缓存与更新>. 使用gulp-rev解决的就是<变态的静态资源缓存与更新>提出的问题. rev会 ...

  7. 百度统计接口demo中错误

    百度统计接口中的demo(PHP版本)下载下来配置后运行出错,应该是编写demo时用的php版本比较低吧,作如下几处修改就好了 一:把CURLOPT_SSL_VERIFYHOST的值改为2,因为1版本 ...

  8. SQL Server如何在变长列上存储索引

    这篇文章我想谈下SQL Server如何在变长列上存储索引.首先我们创建一个包含变长列的表,在上面定义主键,即在上面定义了聚集索引,然后往里面插入80000条记录: -- Create a new t ...

  9. 【Swift学习】Swift编程之旅(一)

    学习一门新语言最经典的例子就是输出“Hello World!” print("Hello World!") swift就是这样来输出的. 如果你使用过其他语言,那么看上去是非常的熟 ...

  10. 一对多关系domain Model中设置使用AutoMapper时出错

    在使用AutoMapper时,把数据从VO-PO时显示如下错误,错误提示说在一对多关系中已将集合设置为EntityCollection,那么这个是为什么呢. 看下action中的代码,我们可以发现这是 ...