阿里面試題:FileInputStream 在使用完以後,不關閉流,想二次使用可以怎麼操作
阿新 • • 發佈:2018-12-15
FileInputStream 中有一個方法是open 方法呼叫的是本地的開啟檔案的方法,fileinputStream 就是通過這個方法來開啟檔案的,所以如果要重寫讀取這個檔案,不重新建立物件,那麼只要呼叫這個方法就可以了。
/** * Opens the specified file for reading. * @param name the name of the file */ private native void open0(String name) throws FileNotFoundException; /** * Opens the specified file for reading. * @param name the name of the file */ private void open(String name) throws FileNotFoundException { open0(name); }
所以問題就轉變成呼叫這個方法就行了,這個就不難了。。反射可以輕鬆搞定。下面是我做了一個測試
@Test public void testFileinp() throws IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { FileInputStream inputStream=new FileInputStream("E:/test/te.txt"); FileOutputStream outputStream=new FileOutputStream("E:/test/te2.txt"); FileOutputStream outputStreams=new FileOutputStream("E:/test/te3.txt"); int len; byte [] by=new byte[8192]; while ((len=inputStream.read(by))!=-1){ outputStream.write(by,0,len); } if(inputStream.read()==-1){ Class in=inputStream.getClass(); Method openo= in.getDeclaredMethod("open0", String.class); openo.setAccessible(true); openo.invoke(inputStream,"E:/test/te.txt"); } while ((len=inputStream.read(by))!=-1){ outputStreams.write(by,0,len); } outputStream.close(); }
結果當然是在 沒有,關閉流的情況下使用 inputStream 讀了兩遍這個檔案。