|
|
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Все время нет четкого понимания разницы между InputStream и OutputStream. Т.к. все относительно, то не врубаюсь когда какие классы (инпут- или аутпут-) использовать. Входящий поток это относительно чего он входящий и то же самое с исходящим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 13:39 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Например, если мы пишем файл, то понятно, что это аутпут, если читаем, то инпут. Но если например у нас есть массив байт, который надо прочитать и записать в другой массив байт? Надо сначала поместить этот исходный массив в InputStream прочитать в буфер, потом записать его через OutputStream в другой массив? Сори, что бред какой-то ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 13:44 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDSВходящий поток это относительно чего он входящий и то же самое с исходящим? Относительно кода, который его использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 13:48 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Ну запиши в InputStream, или прочитай с OutputStream, если получится, то можно продолжить тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 14:07 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDSНапример, если мы пишем файл, то понятно, что это аутпут, если читаем, то инпут. Но если например у нас есть массив байт, который надо прочитать и записать в другой массив байт? Надо сначала поместить этот исходный массив в InputStream прочитать в буфер, потом записать его через OutputStream в другой массив? Сори, что бред какой-то ) Моя учительница математики в школе говорила, что через деньги можно обьяснить если не все, то многое! А типы "ПолучитьДеньги" и "ОтдатьДеньги" вы тоже путаете? В магазине на кассе получив чек требуете от кассира деньги? Продаете свой телефон и вместе с зарядным устройством кладете в упаковку бабло за него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 14:55 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDS Но если например у нас есть массив байт, который надо прочитать и записать в другой массив байт? Смотрите на все глазами буфера для чтения. Читаем инпутом, пишем отуптом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 14:58 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDSВсе время нет четкого понимания разницы между InputStream и OutputStream. Т.к. все относительно, то не врубаюсь когда какие классы (инпут- или аутпут-) использовать. Входящий поток это относительно чего он входящий и то же самое с исходящим? В JDK действительно есть определенная путаница в базовых интерфейсах и классах I/O. Особенно в части реализации текстовых интерфейсов, таких как Reade/Writer. Должен признаться что после кодинга под Microsoft C#.net (где-то в 2004) мне было трудно привыкнуть к способам правильной инициализации конструктора текстового стрима (с кодировками и с буферизацией). Даже сейчас я наизусть это не помню и каждый раз заглядываю в справочник. Но в остальном API достаточно понятный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2017, 22:29 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Вернулся. Пока не выходит каменный цветок в потоках. Задача есть массив байт, представляющих собой архив, его надо распаковать в новый массив байт или в строку (в памяти то бишь). Пробовал по-разному, текущий вариант: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Вызов: Код: java 1. 2. 3. Ломается на zin.read(tempBuffer): invalid entry compressed size (expected 5127 but got 5123 bytes) Что не так пока не пойму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 13:28 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Попробовал сделать то же самое, но с записью в файл. Ошибка лезет та же, но при этом файл из архива достается и создается нормально. Т.е. распаковывается на диск нормально, хоть и с этой же ошибкой. Поэтому заглушил эксепшн и оставил все как было с потоками: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Хоть и работает, но по-моему корявая бредятина, т.к. глушить ошибки это... ну вы понимаете ) Можно заглушить конкретно эту ошибку, но это тоже не норма имхо. В общем вопрос пока открыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 14:47 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Еще проще: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Один файл проходит, а дальше снова invalid entry compressed size. То есть даже не прочитать содержимое архива, только первый файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 15:18 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDS, Ну, так может проблема не в чтении архива а в формировании? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 15:21 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, так может проблема не в чтении архива а в формировании? Тоже закралось такое подозрение. Сохраняем архив в zip-файл. Он нормально распаковывается архиваторами, которые стоят на машине по дефолту. Но если пытаться прочитать, этот архив c диска явой, то снова вылезает эта же ошибка: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Создаем руками на машине архив, читаем его в яве, все нормально читается. Буду пытаться понять, что не так в формировании архива, но они приходят извне... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 15:44 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDSБуду пытаться понять, что не так в формировании архива, но они приходят извне... В формировании не так ровно то о чем написано в исключении. У файлов в архиве есть заголовок, внутри которого указан размер файла. https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers Этот размер не совпадает с фактическим и на то могут быть две причины 1) Ошибка в формировании файла 2) Формат файла не классический Zip из-за чего и возникает разница ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 15:46 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Ой не нравится мне такая конструкция Код: java 1. 2. Откуда zin может знать сколько ему считывать байт в буфер? Дочитает до конца буфера и скажет -1? Разве здесь smart-указатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 16:46 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
SQL2008Дочитает до конца буфера и скажет -1? Согласен, выглядит подозрительно, но подозреваю, что -1 придет, когда уже нечего читать, т.е. все прочитал ) (хвостик должен бы вернуть >0). Подключил апачевскую либу org.apache.tools.zip. Она во всяком случае прочитала содержимое архива и не ругнулась. Придется попробовать изобразить то же самое с потоками и этой либой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 17:05 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Как новичок в Java рекомендую использовать библиотеку net.lingala.zip4j За полдня я написал класс, который зипует файл в памяти, ставит пароль на архив и возвращает его в виде массива байт. Вот работающий пример. Вам соответственно нужно изучить работу net.lingala.zip4j.io.ZipInputStream ZipCreationInMemory Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. InMemoryOutputStream Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 17:15 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
В варианте с апачесвкой библиотекой не нашел возможности распаковки из потока, из файла нормально читает: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. SQL2008 , спасибо большое, подключил ее, будем посмотреть ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 18:23 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Пока не выходит ибо на вход принимается только файл. То есть распаковать в памяти можно конечно, но исходный файл требуется, чтобы был на диске, т.е. только два конструктора: Код: java 1. 2. 3. Вопрос: можно ли имеющийся массив байт преобразовать в File, чтобы засунуть его в конструктор ZipFile, не создавая файл на диске? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:32 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDS, И зачем понадобился именно ZipFile? Можно создать виртуальный диск. Только зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:34 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDSПока не выходит ибо на вход принимается только файл. То есть распаковать в памяти можно конечно, но исходный файл требуется, чтобы был на диске, т.е. только два конструктора: Код: java 1. 2. 3. Вопрос: можно ли имеющийся массив байт преобразовать в File, чтобы засунуть его в конструктор ZipFile, не создавая файл на диске? Можно! Сделайте временный файл и работайте с ним. Поищу код, если найду, то поделюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:41 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
Blazkowicz , залез в примеры по net.lingala.zip4j . Там везде ноги начинают расти от ZipFile. То есть создается новый ZipFile, который на вход берет или File или строку с указанием пути к архиву. Далее в этом ZipFile или ищется конкретный FileHeader по имени (если заранее известно) или перебираются все. Далее для каждого FileHeader создается ZipInputStream и читается файл из архива в буфер. Как без ZipFile сразу сразу достать файл из архива в ZipInputStream, не втыкаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:42 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
SQL2008Можно! Сделайте временный файл и работайте с ним. Поищу код, если найду, то поделюсь. С временным файлом понятно, но это ведь тоже операции с диском, хотелось бы обойтись без них. Вирт. диск вариант, но не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:45 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDS Blazkowicz , залез в примеры по net.lingala.zip4j . Там везде ноги начинают расти от ZipFile. Ну, и на кой черт тогда это счастье нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:57 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
JDSSQL2008Можно! Сделайте временный файл и работайте с ним. Поищу код, если найду, то поделюсь. С временным файлом понятно, но это ведь тоже операции с диском, хотелось бы обойтись без них. Вирт. диск вариант, но не подходит. Примерно так (код выдернут из большого алгоритма поэтому чего-то может не хватать) Код: java 1. 2. 3. 4. 5. 6. 7. 8. Ну и после использования не забывайте удалять временный файл - за вас это никто не сделает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 16:02 |
|
||
|
Стримы для простых смертных
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, и на кой черт тогда это счастье нужно? Примеры или lingala? Сам тоже спрашиваю себя, но в отношении библиотеки ) Но например и апачевская либа вроде тоже работает от файла, а стандартный java.util.zip не ест приходящие архивы, хотя с ним и получается подсунуть поток на распаковку. Остается или все-таки через временные файлы, или искать еще какие-то библиотеки, или найти возможность в этих библиотеках все-таки работать без записи на диск, или написать свой архиватор ) Самый простой и быстрый вариант - это первый конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 16:10 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39412548&tid=2123030]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 300ms |

| 0 / 0 |
