代码之家  ›  专栏  ›  技术社区  ›  Neil Bartlett

不支持标记时如何正确实现inputstream.mark()。

  •  0
  • Neil Bartlett  · 技术社区  · 5 年前

    这是一个关于正确实现Java的问题。 InputStream 接口。

    我有一个实现 不支持 标记/重置功能。因此,它从 markSupported 方法。我应该如何实现 mark 方法在这种情况下?也就是说,如果有人打电话 作记号 尽管有人告诉Mark不受支持,但应该如何处理?

    两个明显的选择是:(a)忽略它,什么都不做;或(b)扔 UnsupportedOperationException . API JavaDocs不提供任何首选指南。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Malt    5 年前

    看起来JDK中的典型实现什么都不做,如果 reset 调用:

    java.util.zip.inflatrinputstream:

    public synchronized void mark(int readlimit) {
    }
    
    public synchronized void reset() throws IOException {
        throw new IOException("mark/reset not supported");
    }
    

    java.io.pushbackinputstream:

    公共同步无效标记(int readlimit){
    }
    
    public synchronized void reset()引发IOException{
    引发新的IOException(“不支持标记/重置”);
    }
    
        2
  •  1
  •   Patrick    5 年前

    我建议你像班上那样做 InputStream 是的,即

    • mark() :不执行javadoc中所述的“inputstream的mark方法不执行任何操作”。
    • reset() :引发一个I/O异常,如javadoc“类inputstream的方法重置只会引发一个IOException。”

    JavaDoc链路: https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html