mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2025-09-09 10:19:41 +02:00
Improve writing XML elements to socket
Instead of allocating one big continuous memory block before "writing" the XMPP stream element to the socket, write the single CharSequences of LazyStringBuilder/XmlStringBuilder. Also change Obserable writer to only notify the listeners after a flush *or* if a certain limit has been reached since the last notification. Otherwise the debugger would "print" every single XML part as result of this change.
This commit is contained in:
parent
3c2ba0ec43
commit
8db0403138
4 changed files with 62 additions and 6 deletions
|
@ -73,6 +73,7 @@ import org.jivesoftware.smack.util.Async;
|
|||
import org.jivesoftware.smack.util.PacketParserUtils;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.util.TLSUtils;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smack.util.dns.HostAddress;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
import org.jxmpp.jid.parts.Resourcepart;
|
||||
|
@ -1316,7 +1317,15 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
|||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
writer.write(element.toXML().toString());
|
||||
|
||||
CharSequence elementXml = element.toXML();
|
||||
if (elementXml instanceof XmlStringBuilder) {
|
||||
((XmlStringBuilder) elementXml).write(writer);
|
||||
}
|
||||
else {
|
||||
writer.write(elementXml.toString());
|
||||
}
|
||||
|
||||
if (queue.isEmpty()) {
|
||||
writer.flush();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue