reader mark_Java Reader mark()方法与示例

reader mark

读者类mark()方法 (Reader Class mark() method)

  • mark() method is available in java.io package.

    mark()方法在java.io包中可用。

  • mark() method is used to set the current position in this stream. When we call reset() method so it reset the stream to the position set by mark() method most recently.

    mark()方法用于设置此流中的当前位置。 当我们调用reset()方法时,它将流重置到最近由mark()方法设置的位置。

  • mark() method is a non-static method, it is accessible with the class object only and if we try to access the method with the class name then we will get an error.

    mark()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方法,则会收到错误消息。

  • mark() method may throw an exception at the time of marking the stream.

    mark()方法在标记流时可能会引发异常。

    IOException: This exception may throw when getting any input/output error or unsupport seek() method.

    IOException :当遇到任何输入/输出错误或不支持seek()方法时,可能引发此异常。

Syntax:

句法:

    public void mark(int r_limit);

Parameter(s):

参数:

  • int r_limit – represents the limit on the number of characters that can be read before the marks gets invalid.

    int r_limit –表示在标记无效之前可以读取的字符数限制。

Return value:

返回值:

The return type of the method is void, it returns nothing.

该方法的返回类型为void ,不返回任何内容。

Example:

例:

// Java program to demonstrate the example 
// of void mark(int r_limit) method of Reader

import java.io.*;

public class MarkOfR {
    public static void main(String[] args) throws Exception {
        Reader r_stm = null;

        try {
            // Instantiates Reader
            r_stm = new StringReader("JavaWorld!!!!");

            // By using read() method isto 
            // read the character from r_stm
            char ch1 = (char) r_stm.read();
            char ch2 = (char) r_stm.read();
            char ch3 = (char) r_stm.read();

            System.out.println("ch1: " + ch1);
            System.out.println("ch2: " + ch2);
            System.out.println("ch3: " + ch3);

            // By using mark() method isto
            // set the current position in this
            // r_stm
            System.out.println("r_stm.mark(1): ");
            r_stm.mark(1);
            char ch4 = (char) r_stm.read();
            char ch5 = (char) r_stm.read();

            System.out.println("ch4: " + ch4);
            System.out.println("ch5: " + ch5);

            // By using reset() method isto
            // reset the stream to the position 
            // set by the call mark() method
            System.out.println("r_stm.reset(): ");
            r_stm.reset();
            char ch6 = (char) r_stm.read();
            char ch7 = (char) r_stm.read();
            char ch8 = (char) r_stm.read();
            char ch9 = (char) r_stm.read();
            char ch10 = (char) r_stm.read();
            char ch11 = (char) r_stm.read();
            char ch12 = (char) r_stm.read();

            System.out.println("ch4: " + ch6);
            System.out.println("ch5: " + ch7);
            System.out.println("ch6: " + ch8);
            System.out.println("ch7: " + ch9);
            System.out.println("ch8: " + ch10);
            System.out.println("ch9: " + ch11);
            System.out.println("ch10: " + ch12);

        } catch (Exception ex) {
            System.out.println("Stream Closed Before!!!");
        } finally {
            // with the help of this block is to
            // free all necessary resources linked
            // with the stream
            if (r_stm != null) {
                r_stm.close();
            }
        }
    }
}

Output

输出量

ch1: J
ch2: a
ch3: v
r_stm.mark(1): 
ch4: a
ch5: W
r_stm.reset(): 
ch4: a
ch5: W
ch6: o
ch7: r
ch8: l
ch9: d
ch10: !


翻译自: https://www.includehelp.com/java/reader-mark-method-with-example.aspx

reader mark

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,`Reader`是一个抽象类,用于读取字符流。`Reader`类提供了`reset()`方法,可以重置字符流的读取位置。 `reset()`方法的作用是将读取位置恢复到最后一次调用`mark()`方法时的位置。如果没有调用过`mark()`方法,那么调用`reset()`方法将抛出`IOException`异常。 以下是`Reader`类中`reset()`方法的声明: ```java public void reset() throws IOException ``` 使用`reset()`方法时需要注意以下几点: 1. 调用`reset()`方法之前必须调用`mark()`方法,否则会抛出`IOException`异常。 2. 如果上一次调用`mark()`方法时已经读取了比`mark`参数更多的字符,则`reset()`方法可能会失败。 3. `reset()`方法可能会失败,因为在某些情况下,无法在缓冲区内保存足够的字符来满足`reset()`方法的需求。 4. `reset()`方法可能会抛出`IOException`异常,因为某些字符流不支持`mark()`和`reset()`方法。 下面是一个简单的示例代码,演示如何使用`reset()`方法: ```java import java.io.*; public class ReaderDemo { public static void main(String[] args) throws Exception { Reader reader = new FileReader("test.txt"); if (reader.markSupported()) { reader.mark(0); char[] buf = new char[1024]; int len = reader.read(buf); System.out.println(new String(buf, 0, len)); reader.reset(); len = reader.read(buf); System.out.println(new String(buf, 0, len)); } else { System.out.println("mark/reset not supported"); } reader.close(); } } ``` 在上面的代码中,首先使用`FileReader`类创建了一个`Reader`对象,并调用`markSupported()`方法检查该字符流是否支持`mark()`和`reset()`方法。如果支持,就调用`mark()`方法来标记读取位置,然后读取一部分字符并输出。接着调用`reset()`方法来将读取位置恢复到标记的位置,再次读取并输出字符。最后关闭`Reader`对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值