У меня есть задача.Загрузите на http-сервер часть файла (я должен пропустить начало файла).
Как это сделать.Знаете ли вы хорошее решение?
Могу ли я использовать собственное решение?Это безопасно?
Мое решение.Я создал подкласс FileEntity, который выдает поток файлов и пропускает начало файла.
Я помещаю свою сущность в запрос.
HttpPut request = new HttpPut (this.uri);
request.setEntity (новый FileOfsetEntity (новый файл (getDestination ()), «двоичный / октет-поток», ofset));
Мой FileOfsetEntity пропускаетсяначало файла.
class FileOfsetEntity extends FileEntity {
long ofset = 0;
public FileOfsetEntity(File file, String contentType, long ofset) {
super(file, contentType);
this.ofset = ofset;
}
@Override
public long getContentLength() {
return this.file.length() - ofset;
}
@Override
public InputStream getContent() throws IOException {
FileInputStream in = new FileInputStream(this.file);
long skiped = in.skip(ofset);
Log.w("FileOfsetEntity.getContent","skiped = " + skiped);
return in;
}
@Override
public void writeTo(final OutputStream outstream) throws IOException {
if (outstream == null) {
throw new IllegalArgumentException("Output stream may not be null");
}
InputStream instream = new FileInputStream(this.file);
long skiped = instream.skip(ofset);
Log.w("FileOfsetEntity.writeTo","skiped = " + skiped);
try {
byte[] tmp = new byte[4096];
int l;
long readed = skiped;
while ((l = instream.read(tmp)) != -1) {
readed += l;
outstream.write(tmp, 0, l);
Log.v("FileOfsetEntity.writeTo",file.getAbsolutePath() + " readed = " + readed + " skiped = " + skiped);
}
outstream.flush();
} finally {
instream.close();
} }}