- 浏览: 441373 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wjy20150716:
我遇到的问题,删除哪个都不行,最后实在没办法了,就用了Tomc ...
Unable to read TLD “META-INF/c.tld” from JAR file的 -
lijun123:
对新手来说不错
Oracle新建用户,授权,建表空间 -
netkongjian:
欢迎加入程序员网址导航[deyi]
[Z]浅析中国五大网址导航!!! -
iijjll:
crystal1205 写道RonQi 写道google搜索“ ...
Unable to read TLD “META-INF/c.tld” from JAR file的 -
iijjll:
oh,yeah! get it。问题解决了!
Unable to read TLD “META-INF/c.tld” from JAR file的
相信BufferedReader应该是大家所熟悉的一个操作类,但是其中的mark,reset方法,不知大家是否有过关注,
近日工作中碰到问题,不解,所以就Google并记录下来,给自己个记录,也希望与大家分享。
关于BufferedReader:
extends Reader
Read text from a character - input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.
In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders. For example,
BufferedReader in
= new BufferedReader( new FileReader( " foo.in " ));
will buffer the input from the specified file. Without buffering, each invocation of read() or readLine() could cause bytes to be read from the file, converted into characters, and then returned, which can be very inefficient.
Programs that use DataInputStreams for textual input can be localized by replacing each DataInputStream with an appropriate BufferedReader.
Since:
JDK1. 1
See Also:
FileReader, InputStreamReader
关于它的mark,reset方法:
public void mark( int readAheadLimit)
throws IOException
Mark the present position in the stream. Subsequent calls to reset() will attempt to reposition the stream to this point.
Overrides:
mark in class Reader
Parameters:
readAheadLimit - Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail. A limit value larger than the size of the input buffer will cause a new buffer to be allocated whose size is no smaller than limit. Therefore large values should be used with care.
Throws:
IllegalArgumentException - If readAheadLimit is < 0
IOException - If an I / O error occurs
public void reset()
throws IOException
Reset the stream to the most recent mark.
Overrides:
reset in class Reader
Throws:
IOException - If the stream has never been marked, or if the mark has been invalidated
在项目中有如下代码:
{
String string = "" ;
try
{
br.mark( 9 );
int charVal = br.read();
while (charVal != ' < ' && ! isFileEnd(br))
{
if (charVal == ' \r ' ){
currentLineNo ++ ;
}
string += ( char )charVal;
br.mark( 9 );
charVal = br.read();
}
br.reset();
if (isFileEnd(br) && charVal > 0 )
{
string += ( char )charVal;
}
return (string);
}
catch (IOException ioe)
{
Message.show(Message.error, ioe.getMessage());
return ( null );
}
}
其功能是:在html文件解析中,读取当前BufferedReader至第一个tag。
其实,BufferedReader的功能是有很多用处的,比如统计文件行数,在html中读取发现tag后再将文件指针返回指向tag前面的位置;
1.在上面的code中,我查阅后(原作者已离职)的理解是:此处就是要在当前处mark一下,读取下一个char后,判断是否'<'
,重复画线处,直到发现'<',然后返回tag前的文本;则此处的9(就是这个9害我思索许久),不一定是9,可以是8,7...2,后面只读一次就又mark了; 1不行(后面讨论)。
2.在文件读取中,使用mark方法时,要注意,要设置mark参数int readAheadLimit=file.length + 1,否则就会爆出异常java.io.IOException: Mark invalid.
原因在于:
jdk中声明:
readAheadLimit - Limit on the number of characters that may be read while still preserving the mark. After reading this many characters
,
attempting to reset the stream may fail. A limit value larger than the
size of the input buffer will cause a new buffer to be allocated whose
size is no smaller than limit. Therefore large values should be used
with care.
英文声明可能有些confused,来看中文的:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取达到或超过此限制的字符
后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。 //就是建议使用大于最大值的值
给大家一段代码可以参考运行:
import java.io.CharArrayReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
String s = " Message.show(Message.error, ioe.getMessage()).一 " ;
char buf[] = new char [s.length()];
s.getChars( 0 , s.length(), buf, 0 );
CharArrayReader in = new CharArrayReader(buf);
BufferedReader f = new BufferedReader(in);
String d = "" ;
int c;
System.out.println(s.length() );
f.mark(s.length() + 1 );
while ((c = f.read()) != - 1 ) {
d += ( char )c;
}
f.reset();
System.out.println(d);
}
}
发表评论
-
《Social Network》中扎克伯格所做的美女照片对比选美的实现原理
2010-11-03 10:10 1445看了《Social Network》,在开场不久后,扎克伯格在 ... -
【转】谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
2010-05-12 16:31 1367这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地 ... -
分类读入、解析XML
2010-05-12 16:28 2382在最近的一个项目,经 ... -
JAVA可使用双括号进行初始化
2010-03-31 11:24 0形如 private static final Set< ... -
HTTPS的实现及其原理
2010-03-26 13:35 10537在以前的一个项目中,需要使用到SSL得加密链接访问,所以对HT ... -
【转】【share】设计模式快速参考
2010-03-26 12:01 1057从网上找到的一个设计模式快速参考,感觉做的非常的好,分 ... -
去除UTF-8文件的BOM的方法
2010-03-01 14:49 2112使用UltraEdit,点击“文件-另存为”,格式选为“UTF ... -
[Z]字符编码笔记:ASCII,Unicode和UTF-8
2009-12-30 10:00 977我 们知道,在计算机内部,所有的信息最终都表示为一个二进 ... -
MAVEN使用
2009-11-13 17:38 753maven的定义、安装、设置就不说了,粘贴一大篇从官网或各处搜 ... -
J2EE/J2SE/J2ME的概念区别
2009-11-05 10:02 2372忽然觉得对J2EE/J2SE/J2ME的概念有些模糊,记忆过的 ... -
RTSP协议简介
2009-10-28 16:21 3129Real Time Streaming Proto ... -
接口 BlockingQueue<E>
2009-04-23 15:01 1625java.util.concurrent 接口 ... -
java中byte转换int时为何与0xff进行与运算
2009-04-20 13:07 3097在剖析该问题前请看如 ... -
Dead store
2008-09-12 17:43 2117In Computer programming , if we ... -
JSP/Servlet的重定向技术综述
2008-08-13 09:20 1297由于response是jsp页面中的隐含对象,故在jsp页 ... -
ServletConfig,ServletContext讲解
2008-08-01 17:35 2830在编写servlet过程中,需要用到 ServletConfi ... -
Transient 关键字用法
2008-05-22 14:45 80931、 java的serialization提供了一个非常 ... -
java的几种对象(PO,VO,DAO,BO,POJO)解释
2008-05-07 11:24 1078一、PO:persistant object 持久对象, ... -
Java Servlet基本方法介绍
2007-03-09 11:49 1053CSDN - 文档 ... -
java 面试中的一道编写一个截取字符串的函数
2007-03-09 16:01 2327package com.heping.xx; //7、编程:编 ...
相关推荐
### Java 中 BufferedReader 的详解 #### 一、BufferedReader 概述 `BufferedReader` 是 Java 标准库中的一个类,位于 `java.io` 包中。它是一种字符输入流,用于读取文本数据,例如从文件或标准输入中读取数据。...
在Java编程语言中,`BufferedReader`和`BufferedWriter`是两个非常重要的I/O流类,用于提高读写操作的效率。它们属于字符流,主要用于处理文本数据,相较于原始的`InputStream`和`OutputStream`,这两个类通过内部...
BufferedReader 开发的结构
给定的代码示例展示了如何使用`BufferedReader`类来读取文件内容。下面将深入解析此代码中的关键知识点,包括`BufferedReader`的用途、如何创建及使用它,以及与之相关的流操作。 ### 关键知识点一:`...
`BufferedReader`是Java IO流中的一个类...以上就是关于`BufferedReader`的`readLine()`方法在实际使用时需要注意的一些关键点。通过合理地使用和理解这些知识点,可以避免许多常见的错误,并提高代码的可读性和效率。
`mark(int readlimit)` 方法允许我们在流中设置一个标记点,这个标记点代表了当前流的位置。参数 `readlimit` 指定了在调用 `reset()` 之前可以读取的字节数。如果超过这个限制,标记可能会被自动清除。设置标记的...
BufferedReader 提供了多种构造方法,包括 BufferedReader(Reader in) 和 BufferedReader(Reader in, int size),其中 size 参数指定了缓冲区的大小。 BufferedReader 的主要方法包括: * close():关闭 ...
BufferedReader 是缓冲字符输入流。它继承于Reader。 BufferedReader 的作用是为其他字符输入流添加一些缓冲功能。
- `mark(int readAheadLimit)`: 设置输入标记。 - `reset()`: 重新设置输入到上一个标记的位置。 - `skip(long n)`: 跳过并丢弃 `n` 个输入字符。 #### 4. 示例代码分析 ```java BufferedReader reader = new ...
BufferedReader的用法---马克-to-win java视频缓存输入流的介绍
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int f = Integer.parseInt(br.readLine()); double c=5*(f-32); c=c/9; System.out.println("Changing it to Celsius is "+c); } }
没有堵塞,客户端和服务端简单的信息传递,利用了BufferedReader读。
NULL 博文链接:https://chaoyi.iteye.com/blog/2084140
`BufferedReader`还提供了其他辅助方法,如`ready()`(检查是否可以读取而不阻塞)和`mark(int readLimit)`/`reset()`(标记当前位置并允许回溯到标记点)等,这对于处理复杂的输入流操作非常有用。 在实际开发中,...
Fibonacci int PrintWriter BufferedWriter FileWriter Integer.parseInt BufferedReader InputStreamReader System.in readLine
- **变量与数据类型**:Java支持基本数据类型(如int、double等)和引用类型(如类、接口和数组)。理解它们的区别对于正确使用变量至关重要。 - **控制流**:包括if条件语句、for、while循环以及switch语句,这些...
文件读写 BufferedReader BufferedWriter 去除代码后面空格 简单 readLine newLine flush
`mark(int readLimit)`方法允许设置一个标记,如果在读取`readLimit`个字符之前调用`reset()`,则可以返回到标记的位置。`skip(long n)`方法用于跳过指定数量的字符。 总的来说,`BufferedReader`和`BufferedWriter...
流分为字节流和字符流,理解流的双向性(输入流和输出流)和装饰器模式的应用(例如BufferedReader和PrintWriter)对于处理输入输出问题非常有帮助。 6. **反射机制**:Java的反射API允许程序在运行时动态地获取类...
- `read(char[] cbuf, int off, int len)`: 从输入流读取字符到指定的字符数组中。 结合使用InputStreamReader和BufferedReader: 通常,为了提高效率,我们会在InputStreamReader之上使用BufferedReader。例如,...