目次へ

解答例 - 実習課題2 - 2.バッファの操作

(実習課題2)

1章の実習課題2で作成したプログラムを変更し、2種類のバイトオーダーを使用して処理を実行し、実行速度の比較ができるようにしてください。またプログラムの実行時にハードウェアの固有バイトオーダーが何であるかを表示するようにしてください。

解答例

package com.techscore.nio.chapter2.subject2;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import java.util.Date;
import java.util.Random;

/**
 * Main.java TECHSCORE NewIO 2章 実習課題2
 * 
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
public class Main {

    public static void main(String[] args) {

        Random random = new Random();
        random.setSeed((int) new Date().getTime());
        ByteBuffer byteBuffer = ByteBuffer.allocate(10000 * 4);        
        long start = System.currentTimeMillis();             
        
        // ビックエンディアン        
        ByteOrder order = ByteOrder.BIG_ENDIAN;
        ByteBuffer tmpBuffer = byteBuffer.order(order);
        int[] ints = tmpBuffer.asIntBuffer().array();
        IntBuffer intBuffer = IntBuffer.wrap(ints);
        System.out.println("ビックエンディアンで実行");
        printChunk(random, ints, intBuffer);   
        
        long end = System.currentTimeMillis();
        System.out.print("経過時間:");
        System.out.println((end - start) + "msec\t");
        
                        
        // リトルエンディアン        
        start = System.currentTimeMillis();
        order = ByteOrder.LITTLE_ENDIAN;
        tmpBuffer = byteBuffer.order(order);
        ints = tmpBuffer.asIntBuffer().array();
        intBuffer = IntBuffer.wrap(ints);
        System.out.println("リトルエンディアンで実行");
        printChunk(random, ints, intBuffer);
        
        end = System.currentTimeMillis();  
        System.out.print("経過時間:");
        System.out.println((end - start) + "msec\t");        
    }

    private static void printChunk(Random random, int[] ints, IntBuffer buffer) {
        int sum = 0;
        int count = 0;
        final int MAX = 10000;
        for (; count < ints.length; count++) {
            int r = (int) (10 * random.nextDouble());
            sum += r;
            if (sum > MAX) {
                break;
            }
            buffer.put(r);
        }

        System.out.print("要素数:\t");
        System.out.println(count);
        System.out.print("バッファデータ\t");
        for (int i = 0; i < buffer.array().length; i++) {
            int data = buffer.array()[i];
            System.out.print(String.valueOf(data));
            if (i < buffer.array().length - 1) {
                System.out.print(", ");
            }
        }
    }
}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp