Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
#1

Socket догрузка файла - Программирование Android

09.12.2016, 13:38. Просмотров 301. Ответов 13
Метки нет (Все метки)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
java.lang.ArrayIndexOutOfBoundsException: length=1024; regionStart=20000; regionLength=1024
 
 
//f_s - сколько было закачено байт
left = размер файла;
 left -= f_s;
                //устанавливаем начало считывания байтов с места, после закачаных на сервер (докачка)
 
                bis.read(new byte[1024], left , 1024);
 
                while (left > 0 && (inlen = bis.read(buffer, 0, (int) Math.min(left, buffer.length))) >= 0) {
                    dos.write(buffer, 0, inlen);
                    left -= inlen;
                }
Пытаюсь до качать файл.
Но когда хочу пропустить уже закачаные байты bis.read(new byte[1024], left , 1024);
- выдает ошибку.

Как правильно установить начало считывания файла с нужного байта?

Добавлено через 18 часов 14 минут
Java
1
bis.read(new byte[1024], left , 1024);
почему нельзя выставлять смещение left, а только 0 писать в параметр смещения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2016, 13:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Socket догрузка файла (Программирование Android):

Socket Android Client and Java Socket Server - Программирование Android
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

Socket - Программирование Android
Как работать с сокетами на Android? Есть литература на эту тему?

Не создается Socket - Программирование Android
есть сервер на c#, но не получается законнектиться на него с приложения на Andriod private static final String SERVER_IP = "127.0.0.1"; ...

Socket server over 3g - Программирование Android
Привет. Хотел программу написать, сервер сокет, но что то в сети 3g не работает. Через домашний роутер с wifi и проброс портов все...

Socket AndroiD - Программирование Android
В общем хочу написать сокет (TCP клиент) на андрюху. http://myandroidsolutions.blogspot.ru/2012/07/android-tcp-connection-tutorial.html ...

TCP Socket Client - Программирование Android
Всем доброго времени суток. Пытаюсь открыть сокет между Android Client и сервером под виндой (когда то написал на билде, использую в...

13
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
09.12.2016, 14:12 #2
к чему этот гимор?
в инете вагон библиотек, которые качают файлы в одну строку
0
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
09.12.2016, 15:33  [ТС] #3
Паблито, у меня описан собственный протокол и просто положить файл на ФТП немогу
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
09.12.2016, 18:33 #4
https://docs.oracle.com/javase/7/doc...html#seek(long)
0
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
10.12.2016, 04:18  [ТС] #5
Вощим... я не правильно истолковал второй параметр метода
JSON
1
 bis.read(new byte[1024], left , 1024);
он отвечает за пропуск байт не при чтении файла (я хотел читать файл с определенного места), а отвечает за пропуск байт первого параметра new byte[1024]. Фактически говорит с какого места писать данные в буфер.
Java
1
new byte[1024] >= left + 1024
Решил проблему методом skip(количество байт которое нужно пропустить)
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
10.12.2016, 08:04 #6
powowstal, такая докачка это фактически перекачка что выигрываем пропуская вместо записывания не ясно
0
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
13.12.2016, 04:21  [ТС] #7
vxg, у устройств с плохим интернетом, случается часты дисконект, на практике 4 разрыва, на закачке 10 Мб.
После разрыва устройство снова восстанавливается связь и получает данные о том сколько байт уже закачено, дальше методом skip() пропускаем уже закаченное и файл докачивается. На сервере файл дописывается.
Цитата Сообщение от vxg Посмотреть сообщение
такая докачка это фактически перекачка
Почему перекачка?
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
13.12.2016, 08:49 #8
powowstal, потому что данные будут приняты и скип не принудит сервер отдавать с заданной позиции а лишь проигнорирует то что было закачано
1
_Night_Scream_
76 / 75 / 8
Регистрация: 08.08.2013
Сообщений: 612
13.12.2016, 16:33 #9
vxg, тоесть фактически за 4 разрыва мы получим трафика уже не 10мб а более, в зависимости где были разрывы, так?
например если 4 разрыва получились на 10ом мегабайте, то мы фактически затратим ~40мб трафика
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
13.12.2016, 19:10 #10
_Night_Scream_, да, с таким подходом - да. Что бы было по другому надо чтобы сайт поддерживал докачку, а вы отправляли специфические запросы, а не просто считывали данные
0
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
14.12.2016, 02:36  [ТС] #11
vxg,
Цитата Сообщение от vxg Посмотреть сообщение
да, с таким подходом - да.
- нет.
Данные передаются с устройства на сервер, на устройстве я получаю ответ от сервера о уже количестве уже загруженных данных. На устройстве при считывании файла пропускается к-во уже загруженных байт методом skip(), а серверу отдаются только не докаченные байты. Сервер дописывает файл.
Вот принцип работы. Видимо было не понятно что откуда качается.
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
14.12.2016, 09:06 #12
powowstal, именно так - было непонятно. Если сервер знает что ему нужно отдать хвост и вы его дописываете к файлу - так и надо писать

Добавлено через 1 минуту
powowstal, почему просто не открывать файл в режиме дозаписи в конец?
0
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
14.12.2016, 13:08  [ТС] #13
vxg,
Цитата Сообщение от powowstal Посмотреть сообщение
Данные передаются с устройства на сервер
Сервер принимает данные, а не устройство. Со стороны сервера было все нормально, сервер и открывал файл для до записи.
Проблема была в том что я не знал как можно было на устройстве считывать файл с определенного места (байта).
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
14.12.2016, 14:48 #14
powowstal, seek не помогал?

Добавлено через 34 секунды
...впрочем о нем уже писали выше, но вы судя по всему как то по своему решили...
0
14.12.2016, 14:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2016, 14:48
Привет! Вот еще темы с ответами:

Socket Server, Client - Программирование Android
Доброго времени суток. Решил разобраться с сокетами. Но почему-то сообщения не приходят... Клиент: messsage = "Test"; client...

Сеть через Socket - Программирование Android
Есть программа (клиент), которая должна подключить к серверу, а он передаст ip других серверов и вообщем нужно иметь несколько подключений...

И снова здравствуй Socket - Программирование Android
Недавнюю проблему с сокетами я решил. теперь возникла другая, суть ее в сл. вот кусочек кода подключения к сокету m_host =...

Задать IP для Socket - Программирование Android
Добрый день подскажите как реализовать возможность ввода IP адреса для открытия Socketa. Планируется простой TCP клиент. Main активитии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru