Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Как использовать Protocol Buffer без файлов

Есть примеры где наглядно показывается как мне сохранить данные в файл и считать их, не могу понять как мне эти данные просто передать к примеру просто закрепив в посте, или просто передать этот класс в другой метод.
AddressBook.Builder addressBook = AddressBook.newBuilder();
// Read the existing address book. try { addressBook.mergeFrom(new FileInputStream(args[0])); } catch (FileNotFoundException e) { System.out.println(args[0] + ": File not found. Creating a new file."); }
// Add an address. addressBook.addPerson( PromptForAddress(new BufferedReader(new InputStreamReader(System.in)), System.out));
// Write the new address book back to disk. FileOutputStream output = new FileOutputStream(args[0]); addressBook.build().writeTo(output); output.close();


Ответ

Используйте не FileInputStream/FileOutputStream, а другие уместные в вашем случае потоки ввода/вывода. Например это могут быть ByteArrayInputStream и ByteArrayOutputStream
// пишем ByteArrayOutputStream baos = new ByteArrayOutputStream(); addressBook.build().writeTo(baos); byte[] data = baos.toByteArray();
// читаем AddressBook addressBook = AddressBook.parseFrom(new ByteArrayInputStream(data));
Или, например, OutputStream HTTP-соединения:
HttpURLConnection conn = (HttpURLConnection) new URL("http://...").openConnection(); conn.setRequestMethod( "POST" ); conn.setRequestProperty("Content-Type", "application/octet-stream"); addressBook.build().writeTo(conn.getOutputStream());

Впрочем, для работы именно с байт-массивом документация предлагает готовые методы:
byte[] toByteArray();: сериализует сообщение и возвращает массив байтов. static Person parseFrom(byte[] data);: парсит сообщение из массива байтов.
То есть что-то вроде:
// пишем byte[] data = addressBook.toByteArray();
// читаем addressBook = AddressBook.parseFrom(data);

Комментариев нет:

Отправить комментарий