2014-11-04 48 views
0

我正在android上并尝试读取tcp套接字,我的tcp服务器正在发送从long数组创建的字节数组。从Android的字节数4字节得到长

在我的android代码中,我能够读取字节数组,但无法从此数组中获取长整型值。

我的代码如下。

while (true) 
 
         { 
 
          if(isClosed){break;} 
 
          message = ""; 
 
          //byte[] buffer=new byte[4]; 
 
          if (socket != null) 
 
          { 
 
           try 
 
           { 
 
            int bytesRead; 
 
            InputStream inputStream = socket.getInputStream(); 
 
            byte[] data = new byte[44]; 
 
            while ((bytesRead=inputStream.read()) != -1) 
 
            { 
 
             int count = inputStream.read(data); 
 
             bytearraytolong(data); 
 
            } 
 
           } 
 
           catch (Exception e) 
 
           { 
 
            Log.i("ThreadTask","readFromStream: "+ e.getMessage()); 
 
           } 
 
          } 
 
          else 
 
          { 
 
           Log.i("ThreadTask", "SocketConnection : Cannot Read, Socket is closed"); 
 
          } 
 
         }

private void bytearraytolong(byte[] bf) 
 
{ 
 
    // how to get long here 
 
}

这里我TCP服务器发送的44个字节的数据,因此有11个长型值,

我想回来一部开拓创新价值我的android应用程序“bytearraytolong”方法

回答

0

我建议看看ByteBuffer(http://developer.android.com/reference/java/nio/ByteBuffer.html)。

您可能还需要检查以确保服务器序列化类型与您如何反序列化一致;字节顺序在某些情况下可能会有所不同。另外,如果您的服务器只发送44个字节,那么您可能正在处理整数,而不是长整数。长整型是8个字节。

的代码你正在寻找将

private Long readLongFromBytes(byte[] bytes) { 
    ByteBuffer bb = ByteBuffer.wrap(bytes); 
    return bb.getLong(); 
} 
0

试试这个,但长期是按@Clayton威尔金森说,8个字节的代码片段。

public static long decodeLong(byte[] input) { 
    long result = 0; 
    for (int i = 0; i < input.length; i++) { 
     if (i >= 8) { 
      break; 
     } 
     result += ((long) input[i] & 0xff) << ((input.length - i - 1) * 8); 
    } 

    return result; 
}