mark()方法怎么用?里面参数代表什么意思? 本帖最后由 didengxiaren 于 2010-07-06 11:58:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 API:public void (int readlimit)在此输入流中标记当前的位置。对 reset 方法的后续调用会在最后标记的位置重新定位此流,以便后续读取重新读取相同的字节。 readlimit 参数告知此输入流在标记位置失效之前允许读取许多字节。 的常规协定是:如果方法 Supported 返回 true,则输入流总会在调用 之后记住所有读取的字节,并且无论何时调用方法 reset ,都会准备再次提供那些相同的字节。但是,如果在调用 reset 之前可以从流中读取多于 readlimit 的字节,则根本不需要该流记住任何数据。 InputStream 的 方法不执行任何操作。 参数:readlimit - 在标记位置失效前可以读取字节的最大限制。另请参见:reset() 我看api没看懂啊。理解不了。import java.io.*;public class TestBufferedInputStream{ public static void main(String args[]){ try{ int c=0; BufferedInputStream bi= new BufferedInputStream(new FileInputStream("E:\\javaIo\\1.txt")); for(int i=0;i<5&&(c=bi.read())!=-1;i++){ System.out.print((char)c); } System.out.println(); bi.(2); //这边我标记了两个字节,后面读了5个,怎么没失效? for(int i=0;i<5&&(c=bi.read())!=-1;i++){ System.out.print((char)c); } System.out.println(); bi.reset(); for(int i=0;i<5&&(c=bi.read())!=-1;i++){ System.out.print((char)c); } bi.close(); }catch(IOException e){ e.printStackTrace(); } }} 的参数是readAheadLimit,可以再读多少字符,这是指读操作超越了流尾之后的限制比如abcd,开始(4),如果读到read()为-1即超越流尾继续读了,再reset就会MarkInvalid,如果开始(5)就可以避免,看一个例子调试一下:import java.io.BufferedReader;import java.io.CharArrayReader;import java.io.IOException;class BufferedReaderDemo { public static void main(String[] args) throws IOException { String s = "test"; char buf[] = new char[s.length()]; s.getChars(0, s.length(), buf, 0); System.out.println(buf); System.out.println(buf.length); CharArrayReader in = new CharArrayReader(buf); BufferedReader f = new BufferedReader(in); int c, d = 0; f.(s.length()); while ((c = f.read()) != -1) { System.out.println(c); d++; } System.out.println("d = " + d); f.reset(); }} 想像下 数据是"abcd" (2)后 有一个指针在b的位置 然后继续读(该干吗干吗); reset()后指针又回到b.不知道说的对不对 讨厌说baidu google 上有 或API上讲的很详细的,有方便的途径当然是选择方便的途径学习了. br.(100);在第100个字节处做标记,从这个地方开始读。br.reset();回到你做标记的地方。我也在学IO,自己的理解 的参数是readAheadLimit, 可不可以理解为预读的限制, 我修改了一下回贴中的程序,的参数为2,第一次读入2个字节,reset后,回到初始位置重新读。 public static void main(String[] args) throws IOException { String s = "test"; char buf[] = new char[s.length()]; s.getChars(0, s.length(), buf, 0); System.out.println(buf); System.out.println(buf.length); CharArrayReader in = new CharArrayReader(buf); BufferedReader f = new BufferedReader(in); int c, d = 0; f.(2); while ((c = f.read()) != -1) { System.out.println(c); d++; if (d == 2) { break; } } System.out.println("d = " + d); f.reset(); while ((c = f.read()) != -1) { System.out.println(c); d++; } } Java异常处理机制 求一只能输入正整数的正则表达式 java高手进!为何第一个sBak不改变s,而第二个intArrayBak却改变了intArray ?? 广州JAVA培训最强 -- JAVA中级培训班(就业班)正式招生 poolman 怎么使用啊 eclipse-SDK-3.0M8的编辑区的光标问题? 在java中提取系统时间 有什么好的代码测量工具,要opensource的 急,在线等待!RMI绑定服务端抛出异常............ Data not found错误 正则表达式问题 JTable添加列后原先显示的外观属性丢失?
readlimit 参数告知此输入流在标记位置失效之前允许读取许多字节。 的常规协定是:如果方法 Supported 返回 true,则输入流总会在调用 之后记住所有读取的字节,并且无论何时调用方法 reset ,都会准备再次提供那些相同的字节。但是,如果在调用 reset 之前可以从流中读取多于 readlimit 的字节,则根本不需要该流记住任何数据。 InputStream 的 方法不执行任何操作。
参数:
readlimit - 在标记位置失效前可以读取字节的最大限制。
另请参见:
reset()
import java.io.*;public class TestBufferedInputStream{
public static void main(String args[]){
try{
int c=0;
BufferedInputStream bi=
new BufferedInputStream(new FileInputStream("E:\\javaIo\\1.txt"));
for(int i=0;i<5&&(c=bi.read())!=-1;i++){
System.out.print((char)c);
}
System.out.println();
bi.(2);
//这边我标记了两个字节,后面读了5个,怎么没失效?
for(int i=0;i<5&&(c=bi.read())!=-1;i++){
System.out.print((char)c);
}
System.out.println();
bi.reset();
for(int i=0;i<5&&(c=bi.read())!=-1;i++){
System.out.print((char)c);
}
bi.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
比如abcd,开始(4),如果读到read()为-1即超越流尾继续读了,再reset就会MarkInvalid,如果开始(5)就可以避免,看一个例子调试一下:
import java.io.BufferedReader;
import java.io.CharArrayReader;
import java.io.IOException;class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
String s = "test";
char buf[] = new char[s.length()];
s.getChars(0, s.length(), buf, 0);
System.out.println(buf);
System.out.println(buf.length);
CharArrayReader in = new CharArrayReader(buf);
BufferedReader f = new BufferedReader(in);
int c, d = 0;
f.(s.length());
while ((c = f.read()) != -1) {
System.out.println(c);
d++;
}
System.out.println("d = " + d);
f.reset();
}
}
不知道说的对不对
br.reset();回到你做标记的地方。
我也在学IO,自己的理解
public static void main(String[] args) throws IOException {
String s = "test";
char buf[] = new char[s.length()];
s.getChars(0, s.length(), buf, 0); System.out.println(buf);
System.out.println(buf.length); CharArrayReader in = new CharArrayReader(buf);
BufferedReader f = new BufferedReader(in);
int c, d = 0;
f.(2); while ((c = f.read()) != -1) {
System.out.println(c);
d++;
if (d == 2) {
break;
}
}
System.out.println("d = " + d);
f.reset(); while ((c = f.read()) != -1) {
System.out.println(c);
d++;
}
}