热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

自定义BufferedReader的实例

下面小编就为大家分享一篇自定义BufferedReader的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

缓冲区的建立目的就是增加传输性能,使我们传输数据更加快速

缓冲区的内部其实很简单 就是在内部封装了一个数组 用数组来存储数据 对外提供一些方法对数组进行访问

其中这些方法的操作就是对数组的指针(角标)。

缓冲区的原理:从源中获取一批数据到缓冲区,再从缓冲区中一个一个取出 取完后用-1作为结束标记

在BufferedReader中我们读取数据方法有read() ,readLine()

read() 其参数为char[],cbuf,int off,int len。其返回值为-1

readLine()方法是一行一行的取 其内部就像是一个字符串容器StringBuffder 其返回值为null;

首先定义一个类 在类中定义两个读取数据的方法 MyReader(),MyReadLine();

public class MyBufferedReader {
 private FileReader fr;
 
 private char[] buff = new char[1024];
 
 private int zz = 0;
 
 private int count = 0;
 
 MyBufferedReader(FileReader fr){
  this.fr = fr;
 }
 
 public int MyRead() throws IOException{
 if(count==0){
  count = fr.read(buff);
   zz =0;
 }
 if(count<0)
  return -1;
 
 char ch = buff[zz++];
 
 count--;
 return ch;
 
}
 public String MyReadLine() throws IOException{
  StringBuilder stb = new StringBuilder();
   
  int ch = 0;
  while((ch=MyRead())!=-1){
   
   if(ch=='\r')
    continue;
   if(ch=='\n')
    return stb.toString();
   
   stb.append((char)ch);
   
  }
  if(stb.length()!=0)
   return stb.toString();
  return null;
 }
 public void MyClose() throws IOException{
  fr.close();
 }
}

里面我定义了指针zz 和一个缓冲区计数器count来记录缓冲区内读取数据的变化

当count==0时 就往缓冲区内读入数据 zz为0 从第一个数开始读

小于0时数据读取完毕 返回-1

在MyReadLine()中 创建一个字符串容器StringBuilder 来存储数据党stb==\n时 一行读取完毕其返回值为null;

以上这篇自定义BufferedReader的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • Jedis接口分类详解与应用指南
    本文详细解析了Jedis接口的分类及其应用指南,重点介绍了字符串数据类型(String)的接口功能。作为Redis中最基本的数据存储形式,字符串类型支持多种操作,如设置、获取和更新键值对等,适用于广泛的应用场景。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
  • 个人学习进阶:深入解析Tomcat架构体系(第一部分)
    大家好,欢迎来到X的技术分享。近期我一直在深入研究Tomcat的架构体系,收获颇丰。作为一款广泛使用的应用服务器,Tomcat的架构设计非常精妙,对理解和优化Web应用具有重要意义。在本系列的第一部分中,我将详细解析Tomcat的核心组件及其工作原理,帮助读者建立坚实的基础。希望这些内容能为大家的学习和实践带来启发。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • 如何解决Windows 7系统中电脑公司遇到的文件夹访问权限问题
    如何解决Windows 7系统中电脑公司遇到的文件夹访问权限问题 ... [详细]
  • Spring注解开发指南:@Resource与@Component详解 ... [详细]
  • 深入理解 CSS 盒模型、box-sizing 属性及定位元素的水平和垂直居中技巧
    深入理解 CSS 盒模型、box-sizing 属性及定位元素的水平和垂直居中技巧 ... [详细]
  • Django新手指南:第三步——构建你的首个项目
    在本教程中,我们将引导你完成创建第一个Django应用的步骤。通过实际操作,你将逐步了解Django框架的核心概念和基本功能。从项目结构到视图和模板的实现,我们将详细介绍每个环节,帮助你快速上手并构建出一个功能完整的Web应用。 ... [详细]
  • 在2020年8月19日的深度分析中,我们探讨了HTML标签中同时存在`a`标签的`href`和`onclick`属性时的触发顺序问题。此外,还讨论了如何在一个自适应高度的父级`div`中,使两个子`div`中的一个固定高度为300px,另一个自动填充剩余空间的方法。最后,文章详细介绍了JavaScript异步加载的多种实现方式,包括但不限于`async`、`defer`属性以及动态脚本插入技术,为开发者提供了丰富的技术参考。 ... [详细]
  • 深入解析JavaScript对象属性中的访问器方法:get/set与getter/setter详解 ... [详细]
  • 在对文件或目录执行详细信息列表操作时,会看到一串字符。这串字符以每三个一组的形式出现,分别代表了用户、用户组及其他用户的访问权限。通过深入解析这些权限设置,可以更好地理解和管理系统的安全性与访问控制。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
author-avatar
王建毓桂恩佳士
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有