【发布时间】:2014-05-07 20:26:46
【问题描述】:
我有一个写线程,使用OutputStream,我想实现一个flush()方法。
As mentioned in the API,
OutputStream 的 flush 方法什么都不做
并应在需要时实施。
我有以下线程,我有点困惑我应该如何覆盖flush()
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void write(byte[] buffer) {
try {
mmOutStream.write(buffer);
// does nothing
mmOutStream.flush();
} catch (IOException e) {
}
}
谢谢!
【问题讨论】:
-
文档说
OutputStream(顺便说一下abstract)的基本实现什么都不做;这并不意味着类继承这个基类使用这个基实现。 -
为什么要覆盖
OutputStream的flush()方法?只需使用PrintWriter、BufferedWriter就可以了很多 impl。 -
既然你想修改一个类的行为(实现
flush())你需要扩展它。您可以先创建自己的类来扩展某种类型的OutputStream,然后您应该能够覆盖和实现flush()。 -
确实如此。抽象类扮演着模板模式的角色,具体类来决定如何填充flush。