2013-04-05 5 views
1

Я использую Odata4j, а моя сущность имеет одно поле , которое является двоичным файлом. При просмотре через браузер он отображается как строка Base64.Обработка двоичного файла с большим количеством файлов, потоковая передача на хранение

Как я могу получить этот файл на своем Android-устройстве?

Я попытался следующие, чтобы получить byte[] ...

String stringData = entity.getProperty("Data").getValue().toString(); 
byte[] data = Base64.decodeBase64(stringData); 

Но это просто дает мне небольшой массив около 7 байт. Однако, когда я отлаживаю, я вижу, что данные entity имеют большое двоичное значение.

У меня также есть проблема со вторым файлом, который создает исключение «из памяти», в идеале я хотел бы иметь возможность загрузить этот файл прямо в хранилище устройства в виде потока/буфера, возможно ли это?

Чтобы быть ясным, возникает вопрос: как перенести эти данные прямо на хранилище устройства?

ответ

3

Я решил эту проблему без использования OData. Существует URL-адрес доступен, который будет возвращать только двоичные данные. Таким образом, с этим URL можно использовать другие классы Java для передачи данных непосредственно на диск.

Значок с таким адресом:

www.example.com/OData.svc/File/Data/$value

(который возвращает только двоичные данные)

Мы можем создать соединение URL и загрузить его:

URL url = new URL(webPage); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

File file = new File(dir, fileName);//need to create a file based on your storage paths 

FileOutputStream out = new FileOutputStream(file); 
InputStream in = urlConnection.getInputStream(); 

byte[] buffer = new byte[1024]; 
int i = 0; 
while ((i = in.read(buffer)) > 0) { 
    out.write(buffer, 0, i); 
} 

out.flush(); 
out.close(); 
in.close(); 
1

Я предполагаю, что entity.getProperty("Data").getValue() фактически возвращает byte[] или char[]. Когда вы вызываете toString() на массив (или на самом деле, любой тип, который не переопределяет toString(), вы получите короткую строку, состоящую из имени типа объекта и идентификатора хэш-кода. Для byte[] или char[], длина которых может составлять 7 символов.

Я предлагаю вам распечатать entity.getProperty("Data").getValue().getClass() подтвердить фактический тип.

+0

Да, это правильно, получается, что 'getValue()' уже является байтом []. Но я все еще не могу сохранить это для хранения (хотя это сама по себе другая проблема). Однако я хотел бы по возможности передавать потоки двоичных данных прямо на диск с помощью OData4j – musefan

+0

@musefan - я не могу помочь вам с этими вопросами. Я не являюсь пользователем/экспертом odata4j. –