你能阻止 BufferedOutputStream (java) 传输吗?
Can you prevent a BufferedOutputStream (java) from transmitting?
我正在尝试使用
将字符串写入 OutputStream
public SSLSocket mClient;
private BufferedOutputStream mOutputStream;
....
mOutputStream = new BufferedOutputStream( mClient.getOutputStream() );
public synchronized void WriteString( String asciiString )
{
mOutputStream.write( asciiString.getBytes() );
mOutputStream.write( 0 );
mOutputStream.flush();
}
....
WriteString( "BASEL ..." );
我使用此方法成功传输了不同的字符串,然后(响应通过流收到的消息)尝试发送上面的消息。
在此调用中,写入操作在写入 "B" 后立即刷新缓冲区,导致通过流发送两个数据包。第一个是单个字符;第二个包含字符串的其余部分。这在 Linux 上正常工作,直到最近更新服务器。
有什么方法可以强制 OutputStream 或 BufferedOutputStream 将 write() 视为原子操作,或者直到 flush() 才传输?
我也试过了
private DataOutputStream mOutputStream;
mOutputStream.writeBytes(asciiString);
mOutputStream.writeByte(0);
mOutputStream.flush();
结果相同。
问题在于 SSLSocket 中 CDC 编码实现的更改。为避免安全问题,它总是在第一个字节后中断消息。
有关完整说明,请参阅
我正在尝试使用
将字符串写入 OutputStreampublic SSLSocket mClient;
private BufferedOutputStream mOutputStream;
....
mOutputStream = new BufferedOutputStream( mClient.getOutputStream() );
public synchronized void WriteString( String asciiString )
{
mOutputStream.write( asciiString.getBytes() );
mOutputStream.write( 0 );
mOutputStream.flush();
}
....
WriteString( "BASEL ..." );
我使用此方法成功传输了不同的字符串,然后(响应通过流收到的消息)尝试发送上面的消息。
在此调用中,写入操作在写入 "B" 后立即刷新缓冲区,导致通过流发送两个数据包。第一个是单个字符;第二个包含字符串的其余部分。这在 Linux 上正常工作,直到最近更新服务器。
有什么方法可以强制 OutputStream 或 BufferedOutputStream 将 write() 视为原子操作,或者直到 flush() 才传输?
我也试过了
private DataOutputStream mOutputStream;
mOutputStream.writeBytes(asciiString);
mOutputStream.writeByte(0);
mOutputStream.flush();
结果相同。
问题在于 SSLSocket 中 CDC 编码实现的更改。为避免安全问题,它总是在第一个字节后中断消息。
有关完整说明,请参阅