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

