Я нашел вопрос здесь на SO: Convert ArrayList<String> to byte []Преобразовать байт [], чтобы ArrayList <String>
Речь идет о преобразовании ArrayList<String>
в byte[]
.
Можно ли преобразовать byte[]
в ArrayList<String>
?
Я нашел вопрос здесь на SO: Convert ArrayList<String> to byte []Преобразовать байт [], чтобы ArrayList <String>
Речь идет о преобразовании ArrayList<String>
в byte[]
.
Можно ли преобразовать byte[]
в ArrayList<String>
?
что-то вроде этого должно быть достаточно, простить любую компиляцию опечаток я просто напугал его здесь:
for(int i = 0; i < allbytes.length; i++)
{
String str = new String(allbytes[i]);
myarraylist.add(str);
}
да его возможность, возьмите каждый элемент из массива байт и преобразование в строку, а затем добавить к ArrayList
String str = new String(byte[i]);
arraylist.add(str);
Это зависит от семантики, которую вы ожидаете от такого метода. Самый простой способ - new String(bytes, "US-ASCII")
- и затем разбить его на нужные вам детали.
Есть, очевидно, некоторые проблемы:
"US-ASCII"
и не "UTF8"
или, скажем, "Cp1251"
?И так далее и т. Д. Но самый простой способ - это на самом деле вызвать конструктор String
- этого будет достаточно, чтобы вы начали.
Похоже, никто не читал оригинальный вопрос :)
Если вы использовали метод из первого ответа сериализовать каждую строку отдельно, делает как раз наоборот даст требуемый результат:
ByteArrayInputStream bais = new ByteArrayInputStream(byte[] yourData);
ObjectInputStream ois = new ObjectInputStream(bais);
ArrayList<String> al = new ArrayList<String>();
try {
Object obj = null;
while ((obj = ois.readObject()) != null) {
al.add((String) obj);
}
} catch (EOFException ex) { //This exception will be caught when EOF is reached
System.out.println("End of file reached.");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
//Close the ObjectInputStream
try {
if (ois != null) {
ois.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Если ваш байт [] содержит сам ArrayList, вы можете сделать:
ByteArrayInputStream bais = new ByteArrayInputStream(byte[] yourData);
ObjectInputStream ois = new ObjectInputStream(bais);
try {
ArrayList<String> arrayList = (ArrayList<String>) ois.readObject();
ois.close();
} catch (EOFException ex) { //This exception will be caught when EOF is reached
System.out.println("End of file reached.");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
//Close the ObjectInputStream
try {
if (ois!= null) {
ois.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
+1 для единственного человека, который посмотрел на другой вопрос. – Dunes
Зачем вам что-то превращать в массив байтов, если вы не смогли его вернуть? И я не знаю, почему вы приняли ответ, который вы сделали. Поскольку он не будет создавать список строк, равный тому, который использовался для создания массива байтов. – Dunes
Возможный дубликат [Что такое кодировка символов и почему я должен ее беспокоить) (http://stackoverflow.com/questions/10611455/what-is-character-encoding-and-why-should-i-bother-with- это) – Raedwald