回答編集履歴

1

補記

2018/01/03 02:57

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -41,3 +41,25 @@
41
41
  誤:`short n1 = (short) ((data1[i + 1] << 8) + data1[i]);`
42
42
 
43
43
  正:`short n1 = (short) ((data1[i + 1] << 8) + (data1[i] & 0xFF));`
44
+
45
+
46
+
47
+ ---
48
+
49
+ 補記: 問題の原因とは関係なく結果は間違ってませんが効率上の指摘を1点。
50
+
51
+
52
+
53
+ 合成後のサンプルデータ(short型)をbyteへ分解する演算ですが、ご質問のコードでは16進数4桁のStringへ変換してその前後の2文字を16進数整数としてパースする方法を採っておられます。しかしその方法よりも整数演算を用いた方が効率的です。Stringのインスタンスを生成しないことでヒープの消費もありませんし、処理自体のスピードもずっと速いです。
54
+
55
+
56
+
57
+ ```java
58
+
59
+ short n = ...;
60
+
61
+ data[i] = (byte)n;
62
+
63
+ data[i] = (byte)(n >> 8);
64
+
65
+ ```