你能阻止BufferedOutputStream(java)传输吗?

时间:2017-06-28 15:43:41

标签: java dataoutputstream bufferedoutputstream

我正在尝试使用

将字符串写入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();

具有相同的结果。

1 个答案:

答案 0 :(得分:0)

问题在于SSLSocket中CDC编码的实现发生了变化。为了避免安全问题,它总是在第一个字节之后中断消息。

请参阅stackoverflow.com/a/33360518/4454122了解完整说明