OSDN Git Service

e28f0eb992c5b7b35e37e97fd99fcf4c6bc26506
[gokigen/FujiCam.git] / app / src / main / java / net / osdn / gokigen / cameratest / fuji / ReceivedDataHolder.java
1 package net.osdn.gokigen.cameratest.fuji;
2
3 import java.nio.ByteBuffer;
4 import java.nio.CharBuffer;
5 import java.nio.charset.Charset;
6 import java.util.Arrays;
7
8 /**
9  *   受信したデータを保持するクラス
10  *
11  */
12 public class ReceivedDataHolder
13 {
14     private final byte[] data;
15     private static final int DATA_OFFSET = 18;
16
17     ReceivedDataHolder(byte[] data, int length)
18     {
19         this.data = Arrays.copyOfRange(data, 0, length);
20      }
21
22     ReceivedDataHolder(char[] data, int length)
23     {
24         byte[] convertedData = toBytes(data);
25         this.data = Arrays.copyOfRange(convertedData, 0, length);
26     }
27
28     public char[] getCharData()
29     {
30         String text = new String(data);
31         return (text.toCharArray());
32     }
33
34     public byte[] getData()
35     {
36         return (data);
37     }
38
39     public ByteBuffer getByteBuffer()
40     {
41         ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length - DATA_OFFSET);
42         dataBuffer.put(Arrays.copyOfRange(data, DATA_OFFSET, (data.length - DATA_OFFSET)));
43         return (dataBuffer);
44     }
45
46     public int getLength()
47     {
48         return (data.length - DATA_OFFSET);
49     }
50
51     /**
52      *   char[]からbyte[]に変換する
53      *    (https://stackoverflow.com/questions/5513144/converting-char-to-byte より)
54      */
55     private byte[] toBytes(char[] chars)
56     {
57         CharBuffer charBuffer = CharBuffer.wrap(chars);
58         ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer);
59         byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit());
60         Arrays.fill(byteBuffer.array(), (byte) 0x00);
61         return (bytes);
62     }
63 }