バイトを文字列に変換したい。
私は 1 つの Android アプリケーションを持っておりflatfile
、データ ストレージに使用しています。
にたくさんのレコードがあるとしますflatfile
。
ここでフラットファイルデータベースでは、私のレコードサイズとその10
文字は固定されており、ここでは多くの文字列レコードシーケンスを保存しています.
しかし、フラット ファイルから 1 つのレコードを読み取ると、各レコードの固定バイト数になります。レコードごとに 10 バイトを書き込んだからです。
私の文字列がS="abc123";
のようなフラットファイルに保存されている場合abc123 ASCII values for each character and rest would be 0
。バイト配列が であることを意味します[97 ,98 ,99 ,49 ,50 ,51,0,0,0,0]
。そのため、バイト配列から実際の文字列を取得したいときは、その時点で以下のコードを使用しており、正常に動作しています。
しかし、私が与えると、inputString = "1234567890"
問題が発生します。
public class MainActivity extends Activity {
public static short messageNumb = 0;
public static short appID = 16;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// record with size 10 and its in bytes.
byte[] recordBytes = new byte[10];
// fill record by 0's
Arrays.fill(recordBytes, (byte) 0);
// input string
String inputString = "abc123";
int length = 0;
int SECTOR_LENGTH = 10;
// convert in bytes
byte[] inputBytes = inputString.getBytes();
// set how many bytes we have to write.
length = SECTOR_LENGTH < inputBytes.length ? SECTOR_LENGTH
: inputBytes.length;
// copy bytes in record size.
System.arraycopy(inputBytes, 0, recordBytes, 0, length);
// Here i write this record in the file.
// Now time to read record from the file.
// Suppose i read one record from the file successfully.
// convert this read bytes to string which we wrote.
Log.d("TAG", "String is = " + getStringFromBytes(recordBytes));
}
public String getStringFromBytes(byte[] inputBytes) {
String s;
s = new String(inputBytes);
return s = s.substring(0, s.indexOf(0));
}
}
しかし、文字列が完全に 10 文字になると問題が発生します。その時点で、バイト配列に2つの0があるため、この行に
s = s.substring(0, s.indexOf(0));
以下の例外が発生しています。
java.lang.StringIndexOutOfBoundsException: length=10; regionStart=0; regionLength=-1
at java.lang.String.startEndAndLength(String.java:593)
at java.lang.String.substring(String.java:1474)
文字列の長さが 10 の場合、どうすればよいでしょうか。
私には2つの解決策がinputBytes.length == 10
あります-それ以外の場合はsubString条件を実行しないように確認できますcheck contains 0 in byte array
。
しかし、アプリケーションの多くの場所でこのことを使用したため、このソリューションを使用したくありません。それで、これを達成する他の方法はありますか?
あらゆる状況で機能する良い解決策を教えてください。最後に2番目のソリューションは素晴らしいと思います。(バイト配列に 0 が含まれていることを確認してから、部分文字列関数を適用します)。