2011-03-31 64 views

回答

12

将您的Fileinputstream包装在BufferedInputStream之内。

缓冲流支持标记。

+0

还有什么方法禁用标记支持的功能? – Roshan 2011-04-01 10:04:42

+0

@Sathish标记更像是一个功能,即使功能在那里,它直到用户使用它。但是,如果您强烈希望阻止标记,则可以创建装饰器类并覆盖mark()方法,而markSupported()则返回false。 – 2011-04-01 10:55:41

+0

这并不总是正确的 - 它可能会给你“重置为无效标记”,这是不一致的。 – ha9u63ar 2017-11-17 11:10:48

10

将它包装在BufferedInputStream中。

,而不是

FileInputStream fis = new FileInputStream(...); 

做到这一点:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(...)); 

,并使用bis,而不是fis;在你的代码中没有其他东西需要改变。

+0

俄罗斯文件名是不是在这一行中发现异常新的FileInputStream(...)我应该怎么做其他所有文件工作正常,但俄罗斯字符不支持文件名 – 2014-02-10 12:51:18

+0

很有可能会出现“重置为无效标记”IOException原因。 – ha9u63ar 2017-11-17 11:11:43

0

尝试这样的事情

public FileInputStream fstream; 
public DataInputStream in; 
public BufferedInputStream bs; 
public String path; 

public void myExample() throws IOException{ 
    path = "yourPath"; 
    try { 
     fstream = new FileInputStream(path); 
     in = new DataInputStream(fstream); 
     bs = new BufferedInputStream(new InputStreamReader(in)); 

     //do something 

     br.close(); //when do something is completed 
     } catch (FileNotFoundException ex) { 
     JOptionPane.showMessageDialog(null, "File not found"); 
     } 
     } 
8

BufferedInputStreams不是魔法。它们只支持与其基础缓冲区一样大的标记,并且这些缓冲区将占用内存。所以,如果你沿着这条路线走下去,那么重要的是你要理解用例,并且可能用适当大小的缓冲区调用BufferedInputStream构造函数。如果底层文件开始变大,并且标记足够远,那么此技术可能无法为您工作。

相关问题