Проверьте это:
^(([A-Za-z]+[,.]?[ ]?|[a-z]+['-]?)+)$
Вы можете проверить это здесь : https : //regex101.com/r/mS9gD7/46
Каждый объект выделяется как часть потока объектов, а не как отдельная личность. «Протокол сериализации потока объектов», как и большинство форматов файлов (но не ZIP!), Имеет заголовок. Это то, что каждый новый ObjectInputStream
ожидает найти только в начале файла. Поместить его в середину потока не получится. Также поток имеет обратные ссылки, поэтому ни один объект не записывается дважды (если не указано иное).
Итак, вам нужно будет создать новый ObjectInputStream
, чтобы он соответствовал каждому ObjectOutputStream
. Существует некоторая внутренняя буферизация, если это вызывает проблему, вам нужно разрезать поток, прежде чем позволить Object (In | Out) putStream
на нем.
ObjectStream содержит верхний и нижний колонтитулы. Он также содержит информацию о состоянии, т. Е. То, что он записывает, основано на уже записанных объектах.
Таким образом, вы не можете просто добавить к существующему ObjectStream. Что вы можете сделать, так это переписать файл и добавлять объекты каждый раз, когда вы это делаете, или обернуть поток своим собственным протоколом, чтобы вы могли правильно писать / читать несколько потоков.
ObjectStream работает лучше всего, когда вы читаете / записываете данные с одним и тем же база кода (особенно для классов, читаемых / записываемых) ObjectStream не предназначен для переносимости между версиями кода или между различными приложениями.
Если производитель и потребитель потоков независимы, для вас имеет смысл просто перезаписывать выходной файл каждый раз и добавлять файл с отметкой времени, чтобы потребитель знал, что пора перезагрузить.
Например,
SomeObject[] obj = new SomeObject[numObjects];
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file");
out.writeObject(obj);
out.close();
long ts = System.currentTimeMillis();
ObjectOutputStream tout =
new ObjectOutputStream(new FileOutputStream("timestamp.obj");
tout.writeObject(new Long(ts));
Потребитель может затем опрашивать файл timestamp.obj каждые несколько минут и, если он изменился, повторно открыть SomeObject []
из потока.
ObjectInputStream in =
new ObjectInputStream(new FileInputStream("timestamp.obj"));
Long ts = (Long)in.readObject();
if (ts > prevts) {
ObjectInputStream in2 = new ObjectInputStream(new FileInputStream("file"));
SomeObject[] obj = (SomeObject[])in.readObject();
prevts = ts;
}