Реверс файла

  • 10
  • Недоступна
Считать с консоли 2 имени файла: файл1, файл2. Записать в файл2 все байты из файл1, но в обратном порядке. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (172)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Clition Программист 1С сможет в Java
22 ноября, 17:27
создавал 2 массива для буфера и буфера-реверса, чтобы писать в одно действие. таким способом 140мб файл пишется 1,5сек. если писать по одному байту, то этот же файл пишется 300сек.
Е К 18 уровень, Краснодар
17 ноября, 14:48
Считал в массив byte[] разом и записал в цикле в обратном порядке. Забываю про Collections.reverse.. Тогда бы не делал цикл в обратном порядке.
Андрюха 23 уровень
30 октября, 02:30
долго и упорно не проходил четвертый пункт пока try-catch с ресурсами не убрал =((
aleksdenni 22 уровень, Полтава
3 ноября, 20:26
У меня прошло с try с ресурсами. Только исключение не в кетч обрабатывал, а пробросил в майн.
Alexey Katachigov 19 уровень, Санкт-Петербург
18 октября, 08:58
Прикол этой задачи в том, что если в файле русские буквы есть, то при перестановке байтов получается кракозябра. Я подозреваю, что это от того, что русские буквы из двух байт состоят, а следовательно если их местами поменять то получится какая-то чушь.
Leo 24 уровень, Москва
16 октября, 16:53
Вы решили задачу лучше, чем 0% учеников. Вам удалось ее решить с 15 попытки. Среднее количество попыток для этой задачи 2.13. Всего эту задачу решили 19718 учеников. Программистами не рождаются.))))
Alexey Katachigov 19 уровень, Санкт-Петербург
18 октября, 08:59
Ты по крайней мере это сделал! На первых уровнях помню в статистике было около 150к человек, а сейчас вон всего 19к. Иногда, на хардовых задачх я наблюдаю цифру в 16к.
Leo 24 уровень, Москва
18 октября, 21:44
Подбодрило)))
RomanSmoll 20 уровень
15 октября, 09:36
Reverse Reading фил фри ту адапт вис ту ёр солюшн
Dmitry Kharchenko 24 уровень, Москва
27 сентября, 20:49
Занес все в байтовый массив. Чтобы не париться с циклами- перегнал все байты в лист, реверсанул, вернул назад в массив. Кода получилось много, но очень легкого. Только потом доперло, что массив тут лишний))) Нужно было влить все байты в лист, после методом reverse() его перевернуть и через for each построчно вогнать во второй файл каждое значение байта))
the10or 27 уровень, Киев
30 сентября, 11:17
лист, наверное, все-таки лучше интовый.
Артем Админ целого королевства Master
16 октября, 15:56
а зачем так сложно? считал в байтовый массив, а при записи просто идёшь с конца в начало. (как обратный вывод массива) можно еще через стек
aleksdenni 22 уровень, Полтава
3 ноября, 20:31
Прикол ))) Точно так же сделал , как написано 😸 Сначала в лист , через вайл . Потом реверс (колекции). Потом запись , через фор ейч.
Андрей 19 уровень, Москва
12 ноября, 14:03
стэк! гениально
Артур Прохоренко 19 уровень, Гомель
14 ноября, 10:40
Тоже хотел через Stack, но при объявлении класса, мозг сказал "Ну куда ты лезешь, это ж его методы вспоминать нужно, давай как обычно через List))" так и получилось)))
Артем Админ целого королевства Master
14 ноября, 12:26
там надо то 2 метода
push() — добавляет элемент на верх стека.
pop() — удаляет верхний элемент из стека и возвращает его.
Anatoly Khalabov 19 уровень, Челябинск
16 сентября, 15:58
Хм) Почитал комментарии, есть интересные решения, но я сделал довольно топорно 1-Создал List 2- Добавил туда все байты 3- В цикле записал эти байты в обратном порядке в файл. 4-Закрыл потоки
Женька 20 уровень, Гомель
8 сентября, 18:51
А у меня решилось в один цикл for (int i = fis.available(); i > 0 ; i--) : пропускаем часть байтов через skip(), читаем нужный и записываем. Чтение с конца
Михаил Клименко 19 уровень, Краснодар Expert
11 августа, 17:00
Всего эту задачу решили 18994 учеников. Считал первый файл в byte массив, создал второй byte массив С помощью переменной-счетчика в цикле заполнил второй массив элементами первого массива, по формуле: array1[count] = array2[i] count ++ i -- такой себе реверс :) Во второй файл записывал элементы второго массива, после "реверса"
Михаил 27 уровень, Саратов
11 августа, 19:11
Второй массив можно и не создавать😉
int i = 0, j = array.length - 1;
do {
    byte tmp = array[j];
    array[j] = array[i];
    array[i] = tmp;
} while (--j > ++i);