Java:InputStream,mark(),reset()

前端之家收集整理的这篇文章主要介绍了Java:InputStream,mark(),reset()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
mark()和reset()方法如何正常工作(在下面的代码中),一步一步?我试图写我自己的例子,但开始抛出错误标记异常或类似的,我不明白在这个代码中放置标记和重置方法的要点是什么,因为我看不到这个或没有区别.
import java.io.*;

class BufferedInputStreamDemo {
    public static void main(String args[]) {
        String s = "© is a copyright symbol,"
                + "however &copy 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)表示自动删除标记.这可能是您的其他代码中的问题,即触发错误,因为该标记已被无效.

猜你在找的Java相关文章