読者です 読者をやめる 読者になる 読者になる

BufferedReaderとInputStreamReaderの処理速度

InputStreamReaderのJavaDocにあるBufferedReaderを使ったファイル読込を書いてみた。

    /**
     * BufferedReaderを使ったファイル読込.
     * @param filePath
     * @param charset
     * @return String
     * @throws IOException
     */
    public static String readFileb(String filePath, EncodeCharset charset) throws IOException{
        BufferedReader breader = null;
        try{
            breader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), charset.getValue()));
            StringBuffer sb = new StringBuffer();
            int buf = -1;
            while((buf = breader.read()) != -1){
                sb.append((char)buf);
            }
            return sb.toString();
        }catch (IOException e) {
            LogUtil.error("ファイル読込に失敗", e);
            throw e;
        }finally{
            try{
                if(breader != null){
                    breader.close();
                }
            }catch (IOException e) {
                LogUtil.error("closeに失敗", e);
                throw e;
            }
        }
    }

すごく単純。 InputStreamReaderをBufferedReaderでラップするだけ。

いつか読んだ本にはこのへんのデザインパターンは理解すると凄く分かりやすくなると書かれていた。
中身忘れちゃったけど(笑)


そんで、どのくらい処理速度に違いがあるのか、実際に比較してみた。

今回はテストデータとしてなんちゃって個人情報を利用した。
# 落としたあとファイルをUTF8で保存し直した。

テスト用のTestCaseはこんな感じ。
読み込んでStringで持つまで。

    /**
     * ファイル読込テスト
     */
    public void testReadFile(){
        try{
            String inputPath = PropertyUtil.getPath(PropertySet.TestFileOutputPath);
            String fileName = "testInputFile.txt";

//            String data = "data";
            String filedata = FileUtil.readFile(inputPath+fileName, EncodeCharset.UTF_8);

//            assertEquals(data, filedata);
        }catch (Exception e) {
            LogUtil.error(e);
            fail();
        }
    }

    public void testReadFileb(){
        try{
            String inputPath = PropertyUtil.getPath(PropertySet.TestFileOutputPath);
            String fileName = "testInputFile.txt";

//            String data = "data";
            String filedata = FileUtil.readFileb(inputPath+fileName, EncodeCharset.UTF_8);

//            assertEquals(data.length(), filedata.length());
        }catch (Exception e) {
            LogUtil.error(e);
            fail();
        }
    }

結果はこちら!!!

ほほー。倍くらい違うんですね。

以上!