Мое приложение подключается к периферии Wi-Fi. Я использую Socket.getInputStream()
и Socket.getOutputStream()
для чтения/записи данных. Когда соединение установлено, я храню эти два потока, чтобы я мог их повторно использовать до тех пор, пока я подключен. Мое приложение отправляет команду через OutputStream
каждую секунду и считывает результат из InputStream
по методу read()
. Через некоторое время я получаю «OutOfMemoryError». Исправьте меня, если я ошибаюсь, но я думаю, что это потому, что read()
не удаляет прочитанные данные с InputStream
, верно?Чтение из InputStream вызывает OutOfMemoryError
Мой вопрос: хорошо ли хранить потоки? Или я должен использовать Socket.getInputStream()
, Socket.getOutputStream()
каждый раз, когда я отправляю новую команду?
Это не проблема с OutputStream
, так как я могу позвонить flush()
. Что относительно reset()
от InputStream
? Удаляет ли это данные для потока?
Вот код, как я инкапсулировать мои Потоки:
@Override
public InputStream getInputStream() throws IOException {
return _Socket.getInputStream();
}
@Override
public OutputStream getOutputStream() throws IOException {
return _Socket.getOutputStream();
}
@Override
public void connect() throws IOException {
try {
SocketAddress socketAddress = new InetSocketAddress(_ip, _port);
_Socket = new Socket(_ip, _port);
} catch (IOException e) {
MyExceptionHandler.appendLog(MyExceptionHandler.exceptionToString(e));
throw e;
}
}
Код для передачи и приема команд происходит из этого API:
Исключения делает также не сразу. Это происходит после ~ 30 минут и много команд отправлено/получено
Необходимо обязательно указать код. – dotvav
Потоки из обычного java.net.Socket определенно не хранят ни одну из данных. Ваша проблема в другом месте. – Joni
Состояние вашего 'while' является изворотливым. Если вы достигнете конца потока перед встречей '\ n',' -1' возвращается неопределенно долго, и у вас есть бесконечный цикл. Если вы выделите память в теле цикла (возможно, в вашем «StringBuilder» добавив -1 снова и снова), у вас в конечном итоге закончится нехватка памяти. Это только предположение, потому что вы не показываете тело цикла. –