2011-12-15 8 views
4

Я нашел вопрос здесь на SO: Convert ArrayList<String> to byte []Преобразовать байт [], чтобы ArrayList <String>

Речь идет о преобразовании ArrayList<String> в byte[].

Можно ли преобразовать byte[] в ArrayList<String>?

+1

Зачем вам что-то превращать в массив байтов, если вы не смогли его вернуть? И я не знаю, почему вы приняли ответ, который вы сделали. Поскольку он не будет создавать список строк, равный тому, который использовался для создания массива байтов. – Dunes

+0

Возможный дубликат [Что такое кодировка символов и почему я должен ее беспокоить) (http://stackoverflow.com/questions/10611455/what-is-character-encoding-and-why-should-i-bother-with- это) – Raedwald

ответ

5

что-то вроде этого должно быть достаточно, простить любую компиляцию опечаток я просто напугал его здесь:

for(int i = 0; i < allbytes.length; i++) 
{ 
    String str = new String(allbytes[i]); 
    myarraylist.add(str); 
} 
+0

Np. Лучше спросите, что в качестве нового вопроса Али, с более подробными примерами того, что вы ищете – Brian

+0

@Ali: Вы имеете в виду String [] в ArrayList - если это так, вы можете использовать Arrays.asList –

+0

@SidMalani: No , Just String to ArrayList . – iSun

3

да его возможность, возьмите каждый элемент из массива байт и преобразование в строку, а затем добавить к ArrayList

String str = new String(byte[i]); 
arraylist.add(str); 
1

Это зависит от семантики, которую вы ожидаете от такого метода. Самый простой способ - new String(bytes, "US-ASCII") - и затем разбить его на нужные вам детали.

Есть, очевидно, некоторые проблемы:

  1. Как мы можем быть уверены, что это "US-ASCII" и не "UTF8" или, скажем, "Cp1251"?
  2. Что такое разделитель строк?
  3. Что делать, если мы хотим, чтобы одна из строк была содержит разделитель?

И так далее и т. Д. Но самый простой способ - это на самом деле вызвать конструктор String - этого будет достаточно, чтобы вы начали.

7

Похоже, никто не читал оригинальный вопрос :)

Если вы использовали метод из первого ответа сериализовать каждую строку отдельно, делает как раз наоборот даст требуемый результат:

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(); 
     } 
    } 
} 
+2

+1 для единственного человека, который посмотрел на другой вопрос. – Dunes

Смежные вопросы