1

クラス プロジェクトの一部としてチャット クライアントとサーバーを構築していますが、解決できない問題が 1 つあります。byte[]テキストは、特定のケースに応じて、固定サイズ (32 または 64 バイト)の形式で渡す必要があります。

メソッドで文字列を変更するbyte[]と、.getBytes()文字列の長さが空の四角形で埋められます。これは、輸送中および受領中は問題ありませんが、ある時点で、文字列を元の形式に変更する必要があります (現在new String(byte[])、空の四角形を使用して削除します。

これを行う良い方法が見つからないようです。助言がありますか?

関連するコード ビット クライアント側:

byte[] bigDataByte = new byte[64];
sendData[2] = (bigDataByte = message.getBytes())
for (int i = 0; i < sendData.length; i++){
    if (sendData[i] != null){
        DatagramPacket sendPacket = new DatagramPacket(sendData[i], sendData[i].length, IPAddress, clientPort);
        clientSocket.send(sendPacket);
    }
}

関連するコード ビット サーバー側:

 String name = new String(getBytes(32));

 private static byte[] getBytes(int size) throws IOException {
    byte[] dataByte = new byte[size];
    DatagramPacket dataPacket = new DatagramPacket(dataByte, dataByte.length);
    servSocket.receive(dataPacket);
    return dataPacket.getData();
 }
4

1 に答える 1

0

わかりませんが、文字セットを指定していないことが問題である可能性があります。

を使用してみてください

例えば

byte[] bytes = str.getBytes("UTF-8");

String str = new String(bytes, "UTF-8");

デフォルトのものはプラットフォームのデフォルトの文字セットを使用するため、不一致が発生する可能性があります。

于 2012-10-29T03:13:19.663 に答える