Java:InputStream,mark(),reset()
发布时间:2020-12-14 16:38:38 所属栏目:Java 来源:网络整理
导读:mark()和reset()方法如何正常工作(在下面的代码中),一步一步?我试图写我自己的例子,但开始抛出错误的标记异常或类似的,我不明白在这个代码中放置标记和重置方法的要点是什么,因为我看不到这个或没有区别. import java.io.*;class BufferedInputStreamDemo {
mark()和reset()方法如何正常工作(在下面的代码中),一步一步?我试图写我自己的例子,但开始抛出错误的标记异常或类似的,我不明白在这个代码中放置标记和重置方法的要点是什么,因为我看不到这个或没有区别.
import java.io.*; class BufferedInputStreamDemo { public static void main(String args[]) { String s = "© is a copyright symbol," + "however © isn't.n"; byte buf[] = s.getBytes(); ByteArrayInputStream in = new ByteArrayInputStream(buf); int c; boolean marked = false; //try_with_resources try (BufferedInputStream f = new BufferedInputStream(in)) { while ((c = f.read()) != -1) { switch (c) { case '&': if (!marked) { f.mark(32); marked = true; } else { marked = false; } break; case ';': if (marked) { marked = false; System.out.print("(c)"); } else System.out.print((char) c); break; case ' ': if (marked) { marked = false; f.reset(); System.out.print("&"); } else System.out.print((char) c); break; default: if (!marked) System.out.print((char) c); break; } } } catch (IOException e) { System.out.println("I/O Error: " + e); } } } 解决方法
当f.mark(32);到达读取的光标已经在& amp;之后,并且将一个标记设置为复位以知道在哪里跳回.所以当你检测到没有关闭元素,你手动打印&并使用重置方法将阅读光标向右移动(使用标记(32)调用放置在标记之后和之后).在下一次阅读时,因为您的标记变量未设置,它将打印字符.
如果您的读取光标超过32个字符,则标记(32)表示自动删除标记.这可能是您的其他代码中的问题,即触发错误,因为该标记已被无效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |