ファイル入出力 Nullの挿入
基本的にNULLを処理しようとするとNullPointerExceptionが発生してしまいます。
そのためNULLにならないように常に考慮しなければなりません。
今まで紹介したファイル入出力でNULLデータを書きこむとどうなるか、テストを行ってみました。
public void testNullWrite(){ String data = null; try{ SimpleFileInOut.write(makeOutFileName(),data); count++; }catch(NullPointerException e){ System.out.println("nullpo SimpleFileInOut"); } try{ BufferedFileInOut.write(makeOutFileName(),data); count++; }catch(NullPointerException e){ System.out.println("nullpo BufferedFileInOut"); } try{ StreamFileInOut.write(makeOutFileName(),data); count++; }catch(NullPointerException e){ System.out.println("nullpo StreamFileInOut"); } try{ BufferedStreamFileInOut.write(makeOutFileName(),data); count++; }catch(NullPointerException e){ System.out.println("nullpo BufferedStreamFileInOut"); } try{ FileUtils.write(new File(makeOutFileName()), data); }catch(NullPointerException e){ System.out.println("nullpo FileUtils"); }catch (IOException e) { e.printStackTrace(); } }
処理結果
nullpo SimpleFileInOut
nullpo BufferedFileInOut
nullpo StreamFileInOut
nullpo BufferedStreamFileInOut
testNullWrite: 3ms.
つまり、ApacheIOのFileUtilsでのみNULLデータを書きこんでもぬるぽが起きない。
ちなみに0Byteのファイルが作成されます。
オレオレJUnit フレームワーク
JUnitでオレオレフレームワーク(というほどのものじゃないが)を書きました。
こうしておくとちょっとだけ楽になります。
public class MyTestFrame extends TestCase{ private long start; private long end; protected static int count = 0; @Override public void setUp(){ System.out.println(); start = System.currentTimeMillis(); } @Override public void tearDown(){ end = System.currentTimeMillis(); System.out.println(getMethodName(count++)+": "+(end-start)+"ms."); } private static String methodNames[] = null; private String getMethodName(int num){ if(methodNames == null || methodNames.length == 0){ List<String> tmpNames = new ArrayList<String>(); Method ms[] = this.getClass().getMethods(); String mn = null; for(Method m : ms){ mn = m.getName(); if(mn.startsWith("test")) tmpNames.add(mn); } methodNames = new String[tmpNames.size()]; methodNames = tmpNames.toArray(methodNames); } return methodNames.length <= num ? "null" : methodNames[num]; } }
こんな感じで標準出力されるのでコマンドベースで実行したりする場合などには役に立ちます。
.
testSimple: 769ms.
.
testBuffered: 206ms.
.
testStream: 307ms.
.
testBufferedStream: 236ms.
.
testApacheIO: 282ms.