我以这样的方式创建了gpsSocket
:
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
final BluetoothDevice gpsDevice = bluetoothAdapter.getRemoteDevice(bluetoothAddr);
gpsSocket = gpsDevice.createRfcommSocketToServiceRecord(RFCOMM_UUID);
gpsSocket.connect();
为简单起见,我删除了错误处理。
之后我设置了一些东西来开始使用socket:
final InputStream in = gpsSocket.getInputStream();
final BufferedReader reader = new BufferedReader(new InputStreamReader(in, "US-ASCII"));
如果我在从reader
阅读时发现异常,我应该关闭reader
,
或gpsSocket
,或两者兼而有之?
答案 0 :(得分:2)
根据经验,您应该始终关注关闭对象,即Closeable
s。
BluetoothSocket
和BufferedReader
都会实现Closeable
接口,这意味着只要您完成该对象,就应该通过调用close()
来处理它们否则你最终会导致内存泄漏。
结构看起来像这样:
BufferedReader reader;
try {
reader = ... // initialization
} catch (some exception) {
...
} finally {
if (reader != null) {
reader.close();
}
}
我应该关闭阅读器, gpsSocket 还是两者?
你当然应该关闭reader
。如果您不再需要gpsSocket
,那么您也应该关闭它。但正如documentation of BluetoothSocket.close()中所见:
如果流已经关闭,则调用此方法无效。