2012-11-05 35 views
0

我可以用此异常检查空流值:番石榴。 CharStreams检查空

(空=供应商!)

或者我需要检查:

(空= readerSupplier.getInput() )

我应该flush()输出流吗? 查看评论。

公共无效的run(){

try { 
     final Process process = Runtime.getRuntime().exec("su"); 
     InputSupplier<InputStreamReader> readerSupplier = CharStreams.newReaderSupplier(new InputSupplier<InputStream>() { 
      @Override 
      public InputStream getInput() throws IOException { 
       return process.getInputStream(); 
      } 
     }, Charsets.UTF_8); 
     OutputSupplier<OutputStreamWriter> writerSupplier = CharStreams.newWriterSupplier(new OutputSupplier<OutputStream>() { 
      @Override 
      public OutputStream getOutput() throws IOException { 
       return process.getOutputStream(); 
      } 
     }, Charsets.UTF_8); 
     // can I check the stream objects for null readerSupplier/writerSupplier? 
     // or need: readerSupplier.getInput()/writerSupplier.getOutput()? 
     if (null != readerSupplier && null != writerSupplier) { 
      ... 
      CharStreams.write(someCommand, writerSupplier); 
      // should I flush() output stream? How better? Flushables.flush(writerSupplier) or Flushables.flush(writerSupplier.getOutput()) 
     } 

回答

1

Process的Javadoc,它看起来并不像其中的任何值都不能为空,所以你不应该需要检查的任何值为空,句号。

在任何情况下,在使用CharStreams.writeOutputSupplier的目的是,它会打开,写,无需你做任何事情,关闭流,因此没有必要flush或做任何事情。

+0

感谢您的回复。非常有用的课程。另一个问题:使用“供应商”平台“Android”的设施是否合适?这不是性能问题吗? – Aleksandr

+0

不,在Android上不应该有'供应商'类型的任何性能问题。 –

+1

我会说,我不一定建议使用'Input/OutputSupplier'。通常希望它们每次都可以多次使用以返回一个新的独立流。由于'Process'只有一个流,并且每次调用'getInputStream()'时都会返回相同的流,如果您尝试多次使用供应商,则会遇到问题,因为流将具有已关闭。 – ColinD