java.util.regex.Pattern
не имеет встроенных протокодирующих функций кодирования и декодирования.Тем не менее, вы можете реализовать это самостоятельно довольно легко (как предполагает Энди Тернер).Примерно так:
Прото
syntax = "proto2";
package termin4t0r;
option java_package = "com.example.termin4t0r";
// Proto for java.util.regex.Pattern
message RegexPatternProto {
// See Pattern.pattern()
optional string pattern = 1;
// See Pattern.flags()
optional int64 flags = 2;
}
Java-функции кодирования и декодирования
class RegexpPatternProtos {
public static RegexPatternProto encode(java.util.regex.Pattern pattern) {
return RegexPatternProto.newBuilder()
.setPattern(pattern.pattern())
.setFlags(pattern.flags())
.build();
}
public static java.util.regex.Pattern decode(RegexPatternProto patternProto) {
return new RegexPatternProto(
patternProto.getPattern(), patternProto.getFlags());
}
}
Я оставляю юнит-тесты как упражнение :) Я даже считаю сериализацию таким способом предпочтительнеепоскольку буферы протокола имеют прямую и обратную совместимость, тогда как у сериализации Java есть проблемы с этим.