java - 通过 Android 套接字发送和接收字节的两个问题:
问题描述
我在发送和接收字节方面遇到了 JAVA/Android 工作室的问题。值得注意的是:使用 TCP 套接字发送和接收超过 127 的字节值。
我在这里收到数据:
try {
mBufferOut = new PrintWriter(socket.getOutputStream());
mBufferIn = new InputStreamReader(socket.getInputStream(), "UTF-8");
char[] buffer = new char[64];
while (mRun) {
mBufferIn.read(buffer);
mServerMessage = String.valueOf(buffer);
if (mServerMessage != null && mMessageListener != null) {
mMessageListener.messageReceived(mServerMessage);
}
mServerMessage = null;
}
并在此处发送数据:
public void sendMessage(final char[] message) {
Runnable runnable = new Runnable() {
@Override
public void run() {
if (mBufferOut != null) {
mBufferOut.write(message);
mBufferOut.flush();
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
当我收到数据时,所有超过 127 的数据都返回为“231、191、189”。当我发送数据时,值 x 超过 127 的每个字节都返回为“195,x”。
我怎样才能干净地解决这个问题?
解决方案
我不认为发送一个String
as 数组char
并使用String.valueOf()
它来恢复它是正确的方法。
String
已经有一种将自身转换为字节的机制:
byte[] bytes = text.getBytes("UTF-8");
...
String text = new String(bytes, "UTF-8");
尝试使用这两种方法进行转换String
,byte[]
反之亦然。
推荐阅读
- powershell - 如何使用 PowerShell 编辑 HKCU 值
- c# - 带参数的自定义组件 Xamarin 绑定命令
- csv - 添加 csv 的第一行作为节点类型的属性 - Neo4J
- sql - 时间戳 SQL 中具有特定小时和分钟的条件
- laravel - Laravel:BroadcastWhen 等价于事件
- facebook - 你能通过他们的 API 下载你的 Facebook 数据吗?
- javascript - Array.filter 也能够映射对象数组是否正常?
- c# - 将数据从 csv 文件写入并将其转换为数组以使用数据 c#
- webview2 - 尝试执行传入函数时,WebView2 HostObjectToScript 抛出运行时 System.NotImplementedException 异常
- python - 从pyserial继承时模拟