あなたがいることを述べる1
私はあなたを示唆serialize "Arrays.toString
が絶対的に必要とされていない。" Base64へのアレイ:
public String serializeArray(final String[] data) {
try (final ByteArrayOutputStream boas = new ByteArrayOutputStream();
final ObjectOutputStream oos = new ObjectOutputStream(boas)) {
oos.writeObject(data);
return Base64.getEncoder().encodeToString(boas.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
その後、アレイにBase64でのデシリアライズ:
public String[] deserializeArray(final String data) {
try (final ByteArrayInputStream bias = new ByteArrayInputStream(Base64.getDecoder().decode(data));
final ObjectInputStream ois = new ObjectInputStream(bias)) {
return (String[]) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
をこれは、Javaを必要とする8.
例:
public static void main(String args[]) throws Exception {
String[] stringArray = new String[]{"One,", "Two", "Three"};
String serialized = serializeArray(stringArray);
String[] deserialized = deserializeArray(serialized);
System.out.println(Arrays.toString(stringArray));
System.out.println(serialized);
System.out.println(Arrays.toString(deserialized));
}
出力
[One,, Two, Three]
rO0ABXVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAN0AARPbmUsdAADVHdvdAAFVGhyZWU=
[One,, Two, Three]
注、これはのために働きます任意Object
そのimplements Serializable
、ちょうどString[]
ではありません。
簡単な別の方法として、あなたは、アレイに参加する前に\,
で,
を置き換えることができ、その後もそれを分割した後,
で\,
を交換してください。これは、CSVが使用する標準の「エスケープ区切り文字」パターンに依存します。しかし、ユーザが入力のどこかに\,
を入力すれば失敗します。したがって、それほど堅牢ではありません:YMMV。
public String serializeArray(final String[] data) {
return Arrays.stream(data)
.map(s -> s.replace(",", "\\,"))
.collect(joining(","));
}
public String[] deserializeArray(final String data) {
return Pattern.compile("(?<!\\\\),").splitAsStream(data)
.map(s -> s.replace("\\,", ","))
.toArray(String[]::new);
}
できません。あなたが**ルール**を持っていない限り。ルールは何ですか? –
String []からStringへの変換とStringからString []への変換は、等価操作でなければなりません – alexanoid
余分なキャストはなぜですか? – shmosel