Вниз  Java-программирование (1-ые посты)
- 27.04.2018 / 14:37
Exception
  Пользователь

Exception 
Сейчас: Offline
Death, Типа файлы jpg последовательно записаны в другой файл .
- 27.04.2018 / 14:52
Exception
  Пользователь

Exception 
Сейчас: Offline
Askalite, А как записывать байты последовательно в файлы , например дошел до D9 записал , создал новый файл и так дальше сканируеш и пишеш уже в другой ?
Что то я смутно помню эту Яву
- 27.04.2018 / 15:30
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Цитата Death:
Как в массив записан? Ты уверен что там чистые записанные байты изображений друг за другом? может это zip? А может из какой-то игры, то и зашифрован может.

Это уже выходит за пределы условий. Лучше бы помог дополнить код на проверку этих условий:
  1. Scanner sc;
  2. sc = new Scanner(new File("input.xz"));
  3. byte r;
  4. boolean ff;
  5. boolean begin;
  6. while(sc.hasNextByte()){
  7.     r=sc.nextByte();
  8.     if(r==0xFF){
  9.         ff=true;
  10.         continue;//исключение последовательностей FF FF FF
  11.     }
  12.     if(ff==true){
  13.         ff=false;
  14.         if(r==0xD8){
  15.             begin=true;
  16.             readjpg(sc);
  17.         }
  18.     }
  19. }
  20.  
  21. readjpg(Scanner sc) throws IOException{
  22. byte r;
  23. boolean ff;
  24.     while(sc.hasNextByte()){
  25.     r=sc.nextByte();
  26.     if(r==0xFF){
  27.         ff=true;
  28.         continue;//исключение последовательностей FF FF FF
  29.     }
  30.    //заголовки
  31.     if((r==0xFE) || (r==0xDB) || ((0xC0>=r)&&(r<=0cC2)) || (r==0xC4) ){
  32.         r=sc.nextByte();
  33.         int i=0|(r<<8);
  34.         r=sc.nextByte();
  35.         i=i|r;
  36.         i-=2;
  37.         while(i>0){
  38.             r=sc.nextByte(); i--;
  39.         }
  40.         continue;
  41.     }
  42.     //старт
  43.     if(r==0xDA){
  44.         r=sc.nextByte();
  45.         int i=0|(r<<8);
  46.         r=sc.nextByte();
  47.         i=i|r;
  48.         i-=2;
  49.         while(i>0){
  50.             r=sc.nextByte(); i--;
  51.         }
  52.         //TODO
  53.         continue;
  54.     }
  55.     }
  56. }

- 27.04.2018 / 15:52
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Exception, начиная от начала файла, сохранять всё в расширяемый массив, каждый шаг и очищать массив при ошибке чтения. Когда дойдёшь до финального байта, всё, включая начальный и финальный байт, из сохранённого массива байтов пишешь в файл.

  1. PrintWriter pw= new PrintWriter(new File("output"+index+".jpg"));

- 27.04.2018 / 16:11
Exception
  Пользователь

Exception 
Сейчас: Offline
Askalite, Хорошо , попробую
- 28.04.2018 / 16:10
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Ух, сделалъ.

  1. Scanner sc;
  2. FileOutputStream pw;
  3. sc = new Scanner(new File("input.xz"));
  4. byte r;
  5. boolean ff;
  6. boolean begin;
  7. int index=0;
  8. while(sc.hasNextByte()){
  9. r=sc.nextByte();
  10. if(r==0xFF){
  11.     ff=true;
  12.     continue;//исключение последовательностей FF FF FF
  13. }
  14. if(ff==true){
  15.     ff=false;
  16.     if(r==0xD8){
  17.         begin=true;
  18.         pw=new FileOutputStream(new File("output"+index+".jpg"));
  19.         pw.write(0xFF);
  20.         pw.write(0xD8);
  21.         readjpg(sc, pw);
  22.         begin=false;
  23.         index++;
  24.     }
  25. }
  26. }
  27. //Очень важно определить правильно конец файла jpeg пропустив шапку.
  28.  
  29. readjpg(Scanner sc, PrintWriter pw) throws IOException{
  30. byte r;
  31. boolean ff;
  32. while(sc.hasNextByte()){
  33. r=sc.nextByte();
  34. pw.write(r);
  35. if(r==0xFF){
  36.     ff=true;
  37.     continue;//исключение последовательностей FF FF FF
  38. }
  39. //заголовки
  40. if((r==0xFE) || (r==0xDB) || ((0xC0>=r)&&(r<=0cC2)) || (r==0xC4) ){
  41.     r=sc.nextByte();
  42.     pw.write(r);
  43.     int i=0|(r<<8);
  44.     r=sc.nextByte();
  45.     pw.write(r);
  46.     i=i|r;
  47.     i-=2;
  48.     while(i>0){
  49.         r=sc.nextByte(); pw.write(r); i--;
  50.     }
  51.     continue;
  52. }
  53. //старт
  54. if(r==0xDA){
  55.     r=sc.nextByte(); pw.write(r);
  56.     int i=0|(r<<8);
  57.     r=sc.nextByte(); pw.write(r);
  58.     i=i|r;
  59.     i-=2;
  60.     while(i>0){
  61.         r=sc.nextByte(); pw.write(r); i--;
  62.     }
  63.     boolean ff;
  64.     while(sc.hasNextByte()){
  65.     r=sc.nextByte(); pw.write(r);
  66.         if(r==0xFF){
  67.         ff=true;
  68.         continue;//исключение последовательностей FF FF FF
  69.         }
  70.         if(ff==true){
  71.         ff=false;
  72.            if(r==0xD8){
  73.            pw.close();
  74.            return;
  75.         }
  76.     }
  77. }
  78. }
  79. }

- 28.04.2018 / 19:04
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
Askalite, в полезные коды :gg:
- 28.04.2018 / 20:22
Exception
  Пользователь

Exception 
Сейчас: Offline
Askalite, Ты тестил на работоспособность ?
- 28.04.2018 / 21:39
Витаминыч
  Супермодератор

Витаминыч 
Сейчас: Offline
Цитата Exception:
Askalite, Ты тестил на работоспособность ?
Нет, конечно :gg: Скомпилировалось - уже круто :hack:
__________________
 わからない!!
- 29.04.2018 / 02:38
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Exception, ну как? Проверил?
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)