Преобразование String в InputStream и OutputStream в String обратно - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь сделать такие преобразования, но у меня есть небольшая проблема.

Допустим, у меня есть следующая строка:

String in = "1234567890123456";

Затем я преобразовываю ее в ByteArrayInputStream следующим образом:

ByteArrayInputStream bais = new ByteArrayInputStream(in.getBytes("UTF-8"));

У меня также есть:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

Затем я делаю свое шифрование:

ch.encrypt(bais, baos);

Так что теперь у меня есть мой "вывод" в baos.Когда я делаю такую ​​вещь:

byte[] b2 = baos.toByteArray();
int[] i2 = toUnsignedIntArray(b2);
writeIntegersAsHex(i2);

где (я знаю, что это не самый элегантный способ, но только для тестирования):

 public static void writeIntegersAsHex(int[] integers) {
    int height = integers.length;
    for (int i = 0; i < height; i++) {
        System.out.print(Integer.toHexString(integers[i]) + ",");
    }
    System.out.println("");
}

Я получаю такой вывод:

d1,68,a0,46,32,37,25,64,67,71,17,df,ee,ef,2,12,

И этот вывод правильный, потому что когда я обрабатываю файл, который содержит ту же строку, что и in, этот вывод совпадает.Но я не могу получить правильную строку из baos.

Пожалуйста, не спрашивайте меня, почему я делаю это так, потому что это был не мой звонок.Я студент, и это один из примеров.

Алгоритм (кстати, aes128) работает нормально, с файлами, но я не могу получить строку для inputtream и outputtream для работы строки.

Ответы [ 2 ]

5 голосов
/ 09 марта 2012

Но я не могу получить правильную строку из baos.

На данный момент ваш вывод - это просто произвольные двоичные данные.Это не закодированный текст - это просто набор битов.

Чтобы преобразовать это в разумную строку, которая позволит вам преобразовать ее обратно в исходные байты, вам, вероятно, следует использовать либо hex, либо base64.Существует публичная библиотека base64 , которая хорошо работает по моему опыту, или множество других альтернатив (как для base64, так и для hex).

2 голосов
/ 09 марта 2012
public static void main(String[] args) throws IOException {
        String in = "1234567890123456";
        ByteArrayInputStream bais = new ByteArrayInputStream(in.getBytes("UTF-8"));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        int i;
        while ( ( i = bais.read() ) != -1  ){
            baos.write(i);
            baos.flush();
             }

        System.out.print(baos.toString());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...