解答例 - 実習課題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(", "); } } } }