Поскольку aLista
очень ограничен в размерах и bListb
потенциально огромен, вам следует преобразовать aLista
в Set
, а не bListb
.
Set<String> missing = new HashSet<>(aLista);
for (String s : bListb) {
if (missing.isEmpty())
break;
missing.remove(s);
}
Код даже закоротит итерацию bListb
, если все значения будут найдены, тогда как преобразование bListb
в Set
не позволит такую логику короткого замыкания.
Здесь найдено одно решение: http://www.timvw.be/generating-utf-8-with-systemxmlxmlwriter/
Мне не хватало этого вверху:
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Encoding = new UTF8Encoding(false);
MemoryStream ms = new MemoryStream();
XmlWriter w = XmlWriter.Create(ms, xmlWriterSettings);
Всем спасибо за помощь!
Проблема в том, что ваш XML, созданный писателем, имеет формат UTF-16, тогда как вы используете UTF-8 для преобразования его в строку. Попробуйте вместо этого:
StringBuilder sb = new StringBuilder();
using (StringWriter writer = new StringWriter(sb))
using (XmlWriter w = XmlWriter.Create(writer))
{
w.WriteStartDocument(true);
w.WriteStartElement("data");
w.WriteElementString("child", "myvalue");
w.WriteEndElement();//data
}
string test = sb.ToString();
Вы можете изменить кодировку следующим образом:
w.Settings.Encoding = Encoding.UTF8;
Все это немного не работает, если вам важна метка порядка байтов, которую используют редакторы (например, Visual Studio определяет XML в кодировке UTF8 и правильно выделяет синтаксис).
Вот решение:
MemoryStream stream = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
settings.IndentChars = "\t";
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
// ... write
// Make sure you flush or you only get half the text
writer.Flush();
// Use a StreamReader to get the byte order correct
StreamReader reader = new StreamReader(stream,Encoding.UTF8,true);
stream.Seek(0, SeekOrigin.Begin);
result = reader.ReadToEnd();
}
У меня есть 2 фрагмента полностью здесь