Я использую сокет UNIX для облегчения связи на устройстве Android между демоном системного уровня, который я запускаю в C, и приложением, которое я запускаю в Java.Я гораздо больше C-кодер, чем Java-кодер, поэтому у меня возникают некоторые проблемы при попытке чтения данных из сокета на стороне Java.В настоящее время мой код выглядит следующим образом:
try{//Prepare to write the command and read the ACK
InputStream is = receiver.getInputStream();
OutputStream os = receiver.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
os.write(message.getBytes());
//FIX THIS!! The following assumes that there is a newline-
// terminated chunk of data waiting for us in the buffer. If
// that assumption is wrong, the code will hang. Find some way
// to determine if/how much data is waiting for us in the socket!
String str = in.readLine();
is.close();
os.close();
receiver.close();
return str;
}catch(IOException ex){
Log.e(TAG,(ex.toString()+"\n"));
return null;
}
Как показывает мой комментарий, эта реализация работает (ish), но имеет очень плохой конструктивный недостаток, заключающийся в том, что код сокета на стороне сервера отвечает строкой, заканчивающейся символом новой строки,Если это не так, мир заканчивается.
То, что я пытаюсь выяснить, - есть ли более эффективные средства для выполнения этой задачи.Можно ли определить, есть ли какие-либо данные, ожидающие чтения в буферизованном считывателе, и если да, то каков размер этих данных?Если нет, то есть ли лучший способ чтения данных через сокет UNIX на стороне Java от Android, с которым я не знаком?
Заранее спасибо!