目次へ

解答例 - 実習課題1 - 1.バッファ

(実習課題1)

まず、以下の要件を満たすメソッドを作成して下さい。

  • int型とboolean型の2つの引数を受け取る。
  • 次の処理を10回繰り返す
    • int型引数で指定された大きさのint型バッファを新規作成する。
    • boolean型引数がtrueのときはダイレクトバッファ、falseのときは非ダイレクトバッファを作成する。
    • バッファの先頭から順に0,1,2,...というように連番の数字を書き込む。
  • メソッドの最後に、引数の内容とメソッドの処理にかかった時間をコンソールに出力する。

このメソッドを、バッファサイズ100/1,000/10,000/100,000/1,000,000、ダイレクトバッファ/非ダイレクトバッファすべての組み合わせで実行するコンソールアプリケーションを作成してください。

解答例

package com.techscore.nio.chapter1.subject1;

import java.nio.ByteBuffer;
import java.nio.IntBuffer;

/**
 * Main.java
 * TECHSCORE NewIO 1章 実習課題1
 * 
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
public class Main {
    public static void main(String[] args) {
    
        Main buff = new Main();
        int[] sizes = {100, 1000, 10000, 100000, 1000000};
        for (int i = 0; i < sizes.length; i++) {
            int size = sizes[i];
            buff.benchMark(size);
        }
    }
    

//  public  void benchMark(int size) {
    private void benchMark(int size) {
        
           System.out.println("サイズ\t種類\t\t時間\t");
           System.out.println("‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾");

           benckMark(size, true);
           benckMark(size, false);
           System.out.println("‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾");
       }

       private void benckMark(int size, boolean bDirect) {

           IntBuffer buffer = null;
           if (bDirect) {
               buffer = ByteBuffer.allocateDirect(size * 4)
                       .asIntBuffer();
           } else {

               buffer = IntBuffer.allocate(size);
           }

           long start = System.currentTimeMillis();
           for (int i = 0; i < size; i++) {
               buffer.put(i, i);
           }

           int[] ints;
           boolean bOK = true;
           try {

               ints = buffer.array();
           } catch (UnsupportedOperationException e) {
               System.out.println(e.getMessage());
               bOK = false;
           }

           if (bOK) {
               System.out.println("OK!");
           }

           long end = System.currentTimeMillis();

           String bufferKind = bDirect ? "ダイレクト" : "非ダイレクト";
           System.out.print(size + "\t");
           System.out.print(bufferKind + "\t");
           System.out.println((end - start) + "msec\t");
       }
}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp