Guava学习之CharSequenceReader

Similar documents
Guava学习之Resources

使用Cassandra和Spark 2.0实现Rest API服务

通过Hive将数据写入到ElasticSearch

使用MapReduce读取XML文件

Spark读取Hbase中的数据

Hadoop&Spark解决二次排序问题(Hadoop篇)

三种方法实现Hadoop(MapReduce)全局排序(1)

Hadoop元数据合并异常及解决方法

Flume-ng与Mysql整合开发

Hive:用Java代码通过JDBC连接Hiveserver

韶关:神奇丹霞

Apache CarbonData集群模式使用指南

哼, 你 們 不 回 答 又 怎 麼 樣? 不 管 是 多 大 來 頭, 現 在 都 被 血 魔 吞 噬 無 蹤 了 你 們 幾 個 真 是 太 過 分, 我 不 犯 你 們, 你 們 卻 一 天 到 晚 來 挑 釁 我 教 尊 冷 笑 著 說 道 嗚, 大 人 土 地 大 姐 跪 下 來, 流 下

如何在 Apache Hive 中解析 Json 数组

使用Apache Beam读写HDFS上的文件

伊春:醉人林都

在Spring中使用Kafka:Producer篇

新・解きながら学ぶJava

使用Hive读取ElasticSearch中的数据

关林:武圣陵寝

泰山:五岳独尊

国内26省市新能源汽车推广规划已出台

北戴河:海阔天空

使用Spark SQL读取Hive上的数据

中北大学常规事项财务报销操作指南


OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

西岭雪山滑雪场

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

Kafka客户端是如何找到 leader 分区的

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

SparkR(R on Spark)编程指南

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

无类继承.key

Ubuntu和CentOS如何配置SSH使得无密码登陆

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

江门:中国第一侨乡

是 喔, 就 是 那 個 在 BBS 醫 療 版 跟 你 嗆 聲, 自 稱 有 三 十 多 年 推 拿 經 驗 的 大 叔 嗎? 一 個 看 來 頗 為 清 秀 的 女 生 問 道, 她 語 氣 中 略 感 訝 異 是 啊, 什 麼 推 拿 按 摩 有 多 好, 還 要 人 生 病 盡 量 不 要

1.5招募说明书(草案)

教育扩张能改善收入分配差距吗?——来自CHNS2006年数据的证据

山水文化,市井人家——以湖州邱城小镇的概念性规划为例

Microsoft Word - 01.DOC

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Apache Spark 2.4 新增内置函数和高阶函数使用介绍

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

JavaIO.PDF

Flink快速上手(QuickStart)

在Fedora上部署Hadoop2.2.0伪分布式平台

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

Flink on YARN部署快速入门指南

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

六种使用Linux命令发送带附件的邮件

chp6.ppt

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

ASP.NET实现下拉框二级联动组件

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

树的非递归中序和层次遍历实现

三种方法实现Hadoop(MapReduce)全局排序(2)

迅速在两个含有大量数据的文件中寻找相同的数据

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

Microsoft PowerPoint - string_kruse [兼容模式]

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

北京大学

据传-蚂蚁金服350亿美元开约A股IPO,马云身价又要暴涨

张家口:塞外明珠

Spark 2.0介绍:在Spark SQL中定义查询优化规则

《计算概论》课程 第十九讲 C 程序设计语言应用

PDF 入不思議解脫境界普賢行願品 ... 《大方廣佛華嚴經卷第四十》

软件工程文档编制

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

untitled

Hive几种数据导入方式

福建福州农村商业银行股份有限公司信息披露制度

01_Service

解决百度统计无法获取https来源的referrer

鼓浪屿:懒得艳遇

四、實習處發展計畫書

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

HBase 中加盐(Salting)之后的表如何读取:协处理器篇

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

C 1

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

EJB-Programming-3.PDF

《C语言程序设计》教材习题参考答案

Spark作业代码(源码)IDE远程调试

行 业 市 场 研 究 属 于 企 业 战 略 研 究 范 畴, 作 为 当 前 应 用 最 为 广 泛 的 咨 询 服 务, 其 研 究 报 告 形 式 呈 现, 通 常 包 含 以 下 内 容 : 一 份 专 业 的 行 业 研 究 报 告, 注 重 指 导 企 业 或 投 资 者 了 解 该

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

《C语言程序设计》第2版教材习题参考答案

Flink快速上手之Scala API使用

昆明:茶暖花瘦

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Chapter 9: Objects and Classes

Transcription:

CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类 CharSequenceReader 类有下面三个成员变量 private CharSequence seq; // 存放字符序列 private int pos; // 存放上述字符序列的下一次读 private int mark; // 可以记录 pos 的位置, 用于下一次重置到 pos 位置 CharSequenceReader 类只有一个构造函数如下 : public CharSequenceReader(CharSequence seq) { this.seq = checknotnull(seq); 这个函数非常的简单, 就是将 seq 赋值给 CharSequenceReader 类的 seq, 使得其他方法可以操作 s eq private void checkopen() throws IOException { if (seq == null) { throw new IOException("reader closed"); private boolean hasremaining() { return remaining() > 0; private int remaining() { return seq.length() - pos; 1 / 5

上面三个函数是 CharSequenceReader 类专有的 checkopen() 函数主要是判断 seq 是否没有被清空, 如果被清空了, 抛出空指针异常 ; 否则什么事都不做 其他的函数实现几乎都用到了 c heckopen hasremaining 函数主要是判断当前是否还有数据可以读 在 CharSequenceReader 类中提供了三个用于读 seq 中数据的函数, 原型如下 : public synchronized int read(charbuffer target) throws IOException public synchronized int read() throws IOException public synchronized int read(char[] cbuf, int off, int len) throws IOException 上述上个函数都是重写自 Reader 类相关的函数,read(CharBuffer target) 函数实现如下 : public synchronized int read(charbuffer target) throws IOException { checknotnull(target); if (!hasremaining()) { return -1; int charstoread = Math.min(target.remaining(), remaining()); for (int i = 0; i < charstoread; i++) { target.put(seq.charat(pos++)); return charstoread; 先判断 seq 中是否没被清空 ; 接着判断 seq 中还有数据可读与否, 如果没有数据可读, 将返回 -1,; 否则得到 target 和 seq 的最小可读空间大小, 并从 seq 读取相应的数据于 target 中 其实 target.put 函数是将一个字符存放在内部 char 数组的相应位置上面去 read 函数最后返回本次读取字符的个数 read() 函数实现如下 : public synchronized int read() throws IOException { return hasremaining()? seq.charat(pos++) : -1; 2 / 5

可以看出, 这个函数实现相当的简单, 先判断 seq 中是否没被清空 ; 接着判断 seq 中还有数据可读与否, 如果有数据可读, 则返回 seq 中下标为 pos 的数据, 且 pos 向后移动一个位置 ; 如果没有数据可读, 则之间返回 -1 read() 函数最多只返回一个字符 read(char[] cbuf, int off, int len) 函数实现如下 : public synchronized int read(char[] cbuf, int off, int len) throws IOException { checkpositionindexes(off, off + len, cbuf.length); if (!hasremaining()) { return -1; int charstoread = Math.min(len, remaining()); for (int i = 0; i < charstoread; i++) { cbuf[off + i] = seq.charat(pos++); return charstoread; 大题和 read(charbuffer target) 函数实现类似 它主要是将读取的到字符存放在 cbuf 下标从 off 开始的位置, 并且依次读取 charstoread 个, 最后返回本次读取到的字符个数 接下来说说 skip(long n) 函数, 它的实现如下 : public synchronized long skip(long n) throws IOException { checkargument(n >= 0, "n (%s) may not be negative", n); // safe because remaining is an int int charstoskip = (int) Math.min(remaining(), n); pos += charstoskip; return charstoskip; 主要是通过移动 pos 指标, 从而达到忽略 seq 中 charstoskip 个字符 上面我们就说了 CharSequen 3 / 5

cereader 类中大多数的函数都是重写 Reader 类的, 阅读 Reader 类中的 skip(long n) 函数我们可以看到, 它忽略了 charstoskip 个字符的同时还保存了本次被忽略的 charstoskip 个字符于 char skipbuffer[] 数组中 剩下的几个函数为 public synchronized boolean ready() throws IOException { return true; public boolean marksupported() { return true; public synchronized void mark(int readaheadlimit) throws IOException { checkargument(readaheadlimit >= 0, "readaheadlimit (%s) may not be negative", readaheadlimit); mark = pos; public synchronized void reset() throws IOException { pos = mark; public synchronized void close() throws IOException { seq = null; 都是比较简单的,ready() 函数简单的判断 seq 是否没被清空, 从而返回 true 或者抛出异常 ( 见 checkopen() 函数 ) marksupported() 函数只是简单的标识 CharSequenceReader 类支持标记这个方法 mark 函数主要是记录下 seq 当前的下标 reset() 函数是将当前的下标重置为 mark clo se() 函数主要是清空 seq 中的数据 我们可以从源码中发现,CharSequenceReader 类中绝大部分的函数都是用了 synchronized 修饰的, 这使得每一次只有一个线程执行相关的函数 ( 完 ) 本博客文章除特别声明, 全部都是原创! 4 / 5

Powered by TCPDF (www.tcpdf.org) 转载本文请加上 : 转载自过往记忆 (https://www.iteblog.com/) 本文链接 : () 5 / 5