如何创建线程安全的InputStream。在多线程操作期间,InputStream数据会被破坏,那么我该如何使我的InputStream线程安全?以下代码是否有效?
public class SynchronizedInputStream extends InputStream{
private InputStream in;
private SynchronizedInputStream( InputStream in ) {
this.in = in;
}
/* ... method for every InputStream type to use */
public static InputStream createInputStream( InputStream in) {
return new SynchronizedInputStream( in);
}
public static InputStream createPushBackInputStream(InputStream in,int BUFSIZE){
return new SynchronizedInputStream(new PushbackInputStream(in,BUFSIZE));
}
/* Wrap all InputStream methods Used */
public int read(){
synchronized (this) {
try {
return in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
return 0;
}
@Override
public int available() {
synchronized( this ) {
try {
return in.available();
} catch (IOException e) {
e.printStackTrace();
}
}
return 0;
}
}
在NANOHTTPD文件中。 public HTTPSession(TempFileManager tempFileManager, InputStream inputStream, OutputStream outputStream, InetAddress inetAddress) {
this.inputStream=(PushbackInputStream) SynchronizedInputStream.createPushBackInputStream(inputStream);
/*lines of code..........*/
}
然后我这样调用它
String Data = readStream(session.getInputStream());//session is HTTPSession
/*.....code....*/
private String readStream(InputStream in) {
synchronized (in) {
PushbackInputStream inputStream = (PushbackInputStream) in;
StringBuffer outputBuffer = null;
try {
//Reading the InputStream Here
}
} catch (IOException ioe) {
//error msg
}
return outputBuffer.toString();
}
}