广告
返回顶部
首页 > 资讯 > 精选 >java中字符流缓冲区的作用是什么
  • 619
分享到

java中字符流缓冲区的作用是什么

java字符流缓冲区 2023-05-31 07:05:41 619人浏览 泡泡鱼
摘要

本篇文章为大家展示了java中字符流缓冲区的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 为什么要缓冲区?程序频繁地操作一个资源(如文件),则性能会很低,此时为了提升性能,就可以将一

本篇文章为大家展示了java中字符流缓冲区的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1. 为什么要缓冲区?

程序频繁地操作一个资源(如文件),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域中,以后直接从此区域中读取数据即可,因为读内存速度比较快,这样提高性能。在io中引入缓冲区,主要是提高流的读写效率。

2. 缓冲技术的原理?

总的来说,缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高

3. BufferedWriter类

①. 定义

public class BufferedWriter extends Writer

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组字符串的高效写入。

②. 常用的方法:

// 关闭此流,但要先刷新它,实际上调用了Writer类的close方法 public void close() throws IOException // 刷新该流的缓冲 public void flush() throws IOException // 写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义 public void newLine() throws IOException // 写入字符数组的某一部分 public void write(char[] cbuf, int off, int len) throws IOException // 写入单个字符 public void write(int c) throws IOException

BufferedReader类

①.定义:

public class BufferedReader extends Reader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

②. 常用的方法:

// 关闭该流并释放与之关联的所有资源 public void close() throws IOException // 读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行 public String readLine() throws IOException // 将字符读入数组的某一部分 public int read(char[] cbuf, int off, int len) throws IOException // 读取单个字符 public int read() throws IOException

范例:通过缓冲区复制一个文本文件

File source = new File("Demo.txt"); if (!source.exists()) {   return; } BufferedWriter bufferedWriter = null; BufferedReader bufferedReader = null; try {   bufferedReader = new BufferedReader(new FileReader(source));   bufferedWriter = new BufferedWriter(new FileWriter("Demo_copy.txt"));   String line = null;   while ((line = bufferedReader.readLine()) != null) {     bufferedWriter.write(line);     bufferedWriter.newLine();  // 换行     bufferedWriter.flush();   //将缓冲区数据刷到指定文件中   } } catch (Exception e) {   throw new RuntimeException("文件复制失败!"); } finally {   // 关闭 bufferedWriter 和 bufferedReader }

5.缓冲区原理图解

java中字符流缓冲区的作用是什么

6.根据原理图,自定义缓冲类

 public class MyBufferedRead extends Reader{      private Reader read;    private char[] buffer = new char[1024];   // 用于记录存储到缓冲区中字符个数的变量   private int count = 0;   // 用于操作数据中元素的角标   private int pos = 0;    public MyBufferedRead(Reader read) {     this.read = read;   }       public int myRead() throws IOException {     // 读取一批数据到缓冲数据buffer中     if (count == 0) {       count = read.read();       pos = 0;     }      if (count < 0)       return -1;      char ch = buffer[pos];     pos++;     count--;     return ch;   }       public String myReadLine() throws IOException {     StringBuilder stringBuilder = new StringBuilder();     int ch = 0;     while ((ch = read.read()) != -1) {       // 如果遇到此字符,则继续       if (ch == '\r') {         continue;       }       // 如果遇到此字符,表示该行读取结束       if (ch == '\n') {         return stringBuilder.toString();       }       // 将该行的字符添加到容器       stringBuilder.append((char) ch);     }     // 如果读取结束,容器中还有字符,则返回元素     if (stringBuilder.length() != 0) {       return stringBuilder.toString();     }     return null;    }       public void myClose() throws IOException {     read.close();   }    @Override   public int read(char[] cbuf, int off, int len) throws IOException {     return 0;   }    @Override   public void close() throws IOException {   } }

测试自定义缓冲类

public class MyBufferedReadDemo {      @Test   public void bufferedDemo() throws IOException{     FileReader fileReader = new FileReader("JAVA专业术语集.txt");     BufferedReader bufferedReader = new BufferedReader(fileReader);     int ch = 0;     while ((ch = bufferedReader.read()) != -1) {       System.out.print((char) ch);     }     // 关闭 bufferedReader     bufferedReader.close();   }         @Test   public void myBufferedDemo() throws IOException{     FileReader fileReader = new FileReader("JAVA专业术语集.txt");     MyBufferedRead myBufferedRead = new MyBufferedRead(fileReader);     int ch = 0;     while ((ch = myBufferedRead.myRead()) != -1) {       System.out.print((char) ch);     }     myBufferedRead.myClose();   }         @Test   public void readLineDemo() throws IOException{   FileReader fileReader = new FileReader("JAVA专业术语集.txt");     BufferedReader bufferedReader = new BufferedReader(fileReader);     String line = null;     while ((line = bufferedReader.readLine()) != null) {       System.out.println(line);     }     bufferedReader.close();      }         @Test   public void myReadLineDemo() throws IOException{     FileReader fileReader = new FileReader("JAVA专业术语集.txt");     MyBufferedRead myBufferedRead = new MyBufferedRead(fileReader);     String line = null;     while ((line = myBufferedRead.myReadLine()) != null) {       System.out.println(line);     }     myBufferedRead.myClose();     } }

①问题:上面有一个范例------缓冲区复制一个文本文件,怎么让复制后每行带有行标?
回答:

要实现此功能,最方便的是使用LineNumberReader,下面我们看下这个类

此类的定义:

public class LineNumberReaderextends BufferedReader

跟踪行号的缓冲字符输入流。此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。
实现上面功能程序代码如下:

FileReader fileReader = new FileReader("tempFile\\demo.java"); LineNumberReader lineNumberReader = new LineNumberReader(fileReader); String line = null; // 设置开始行号 lineNumberReader.setLineNumber(10); while ((line = lineNumberReader.readLine()) != null) {   System.out.println(lineNumberReader.getLineNumber() + "\t" + line); } lineNumberReader.close();

上述内容就是java中字符流缓冲区的作用是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: java中字符流缓冲区的作用是什么

本文链接: https://www.lsjlt.com/news/224233.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中字符流缓冲区的作用是什么
    本篇文章为大家展示了java中字符流缓冲区的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 为什么要缓冲区?程序频繁地操作一个资源(如文件),则性能会很低,此时为了提升性能,就可以将一...
    99+
    2023-05-31
    java 字符流缓冲区
  • Java字符缓冲流怎么使用
    这篇文章主要介绍“Java字符缓冲流怎么使用”,在日常操作中,相信很多人在Java字符缓冲流怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java字符缓冲流怎么使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-29
  • JAVA中字符串常量池和缓冲池的作用是什么
    这篇“JAVA中字符串常量池和缓冲池的作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JAVA中字符串常量池和缓冲池...
    99+
    2023-06-29
  • Java 轻松掌握字符缓冲流的使用
    目录一、字符缓冲流二、字符缓冲流的特有方法一、字符缓冲流 BufferedWriter:文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。可以指定缓冲区大小,或者...
    99+
    2022-11-13
  • Java基础学习之字符缓冲流的应用
    目录一、字符缓冲流二、字符缓冲流复制Java文件三、字符缓冲流特有功能四、字符缓冲流特有功能复制Java文件一、字符缓冲流 字符缓冲流介绍: BufferedWriter:将文本写入...
    99+
    2022-11-13
  • java字符流与字节流的区别是什么
    java中字符流与字节流的区别:(推荐:java视频教程)字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。字节流默认不使用缓冲区;字符流使用缓冲区。字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支...
    99+
    2022-03-22
    java 字符流 字节流
  • Java NIO中Buffer缓冲区有什么用
    这篇文章主要介绍Java NIO中Buffer缓冲区有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、Buffer 简介Java NIO 中的 Buffer 用于和 NIO 通道进行交互。数据是通道...
    99+
    2023-06-29
  • java中NIO通道和缓冲区是如何工作的
    这篇文章将为大家详细讲解有关java中NIO通道和缓冲区是如何工作的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通道 和 缓冲区 是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们。通道...
    99+
    2023-06-17
  • 日志记录器缓冲区大小的作用是什么
    本篇内容主要讲解“日志记录器缓冲区大小的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“日志记录器缓冲区大小的作用是什么”吧!日志记录器缓冲区大小日志的作用是:主要是用于给工程师们反馈使...
    99+
    2023-06-20
  • java字符和字节的区别是什么
    byte即字节的意思,是java中的基本数据类型,用来申明字节型的变量,一个字节包含8个位,所以,byte类型的取值范围是-128到127。通常在读取非文本文件时(如图片,声音,可执行文件)需要用字节数组来保存文件的内容,在下载文件时,也是...
    99+
    2016-10-13
    java入门 java 字符 字节 区别
  • java转义字符的作用是什么
    今天就跟大家聊聊有关java转义字符的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、概念在java中有一些字符具有特殊作用,如果想要表示这个字符本身,不想要表示特殊的作...
    99+
    2023-06-15
  • Java字符串常量池的作用是什么
    这篇文章将为大家详细讲解有关Java字符串常量池的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么会有常量池的概念不知道小伙伴们是否有思考过这个问题 没有思考也无所谓,小编在这...
    99+
    2023-06-20
  • Java中的字符串是什么
    这篇文章给大家分享的是有关Java中的字符串是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java中的字符串String : 内容不可更换的StringBuffer :  线程安全的StringB...
    99+
    2023-06-03
  • PHP中元字符的作用是什么
    今天就跟大家聊聊有关PHP中元字符的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。元字符(原子修饰符)原子数量修饰符+表示前面的原子出现-次或者多次表示前面的原子出现e次或...
    99+
    2023-06-15
  • Java中::符号的作用是什么
    本篇内容主要讲解“Java中::符号的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中::符号的作用是什么”吧!1. 前言Java中的方法引用,很多同学都见过但却叫不出名字,在...
    99+
    2023-06-16
  • java中的字符串池是什么
    今天就跟大家聊聊有关java中的字符串池是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。字符串池是Java的一个特性,可以通过一段代码理解。String a = "He...
    99+
    2023-05-31
    java 字符串池 ava
  • Nodejs中的buffer缓存区的作用是什么
    这篇文章主要讲解了“Nodejs中的buffer缓存区的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Nodejs中的buffer缓存区的作用是什...
    99+
    2022-10-19
  • java中的工作流是什么
    Java中的工作流是指一种管理和协调业务流程的方式。它是一种可以自动化执行、监控和控制各种业务流程的技术,可以帮助组织优化和改进其业...
    99+
    2023-08-25
    java
  • java使用的字符码集是什么
    本篇内容介绍了“java使用的字符码集是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java语言使用的字符码集是Unicode,Uni...
    99+
    2023-06-26
  • Java中相等符号的作用是什么
    在Java中,相等符号(==)用于比较两个变量的值是否相等。它的作用是判断两个变量的值是否相等,并返回一个布尔值(true或fals...
    99+
    2023-09-15
    Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作