2014-09-06 2 views
1

Я пытаюсь извлечь объект из ведра с помощью openPrefetchingReadChannelGCSInputChannel. Как Google developer tutorial says:openPrefetchingReadChannel не работает в API клиента облачного хранилища Google

GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, 1024 * 1024); 

Prefetching provides is a major performance advantage for most applications, because it 
allows processing part of the file while more data is being downloaded in the background 
in parallel.The third parameter is the size of the prefetch buffer, set in the example 
to 1 megabyte. 

Ну, это не для меня. Пожалуйста, посмотрите на мой сниппет:

GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, 1024); 
    copy(Channels.newInputStream(readChannel), resp.getOutputStream()); 

    private void copy(InputStream input, OutputStream output) throws IOException { 
    try { 
     byte[] buffer = new byte[BUFFER_SIZE]; 
     int bytesRead = input.read(buffer); 
     while (bytesRead != -1) { 
     output.write(buffer, 0, bytesRead); 
     bytesRead = input.read(buffer); 
     } 
    } finally { 
     input.close(); 
     output.close(); 
    } 
    } 

Ref: https://code.google.com/p/appengine-gcs-client/source/browse/trunk/java/example/src/com/google/appengine/demos/GcsExampleServlet.java

Приведенный выше код должен доставить 1KB данных из загруженного объекта, но он возвращает все данные объекта т.е. 8.4KB. Пожалуйста, посмотрите на скриншот:

Check Network tab of Inspect element

Я не уверен, что происходит. Нужна ваша помощь ребятам

ответ

2

Третий аргумент для openPrefetchingReadChannel - это не максимальный размер для чтения (или ограничения). Является внутренним размером буфера для предварительной выборки. В вашем случае вы можете отслеживать, сколько вы читаете и продолжаете писать, пока не достигнете желаемого предела

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