|
|
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
sharmankajdroidиспользуйте log4j, там все уже реализовано или базу данных и транзакции в качестве бонуса, зачем изобретать велосипед хочу разобраться, поэтому нужен свой :) лисапет только на картинке просто устроен, а когда начинаеш его собирать самостоятельно всплывает огромная масса нюансов кстати log4j опенсорсный, он не за один день писался, там можно посмотреть как все должно правильно работать и понять стоит ли писать свой :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 14:17:33 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
sharmankaДавайте считать, что у меня академический интерес :) Дык с постановкой задачи определитесь. "Чтобы не перезатиралось" это что-то очень сумбурное и расплывчатое. Конечная цель какая? Написать тест убедится что прирост производительности отсутствует? Какого размера блоки записываются за одну операцию одним потоком? Пишем только в конец или в любую позицию? sharmankaВопрос по этому счетчику - как, куда, каким образом? 14877167 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 14:19:32 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
jdroid он не за один день писался, там можно посмотреть как все должно правильно работать и понять стоит ли писать свой :-) AFAIK там очередь и однопоточная запись в файл. Так ведь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 14:20:22 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
Blazkowiczjdroid он не за один день писался, там можно посмотреть как все должно правильно работать и понять стоит ли писать свой :-) AFAIK там очередь и однопоточная запись в файл. Так ведь? давно там не лазил, но вряд-ли за это время придумали что-то революционное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 14:37:04 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, получилось по способу, который я описывал выше. P.S.: Если кому-то интересно, то на этапе, когда конечный размер файла известен, а запись еще не началась создаем пустой файл и назначаем ему длину методом setLength. В нитях же, в зависимости от номера текущей нити пропускаем (номер) * (количество, которое должна записать нить) байт. На выходе имеем запись несколькими нитями одновременно в один файл без всяких локов на файл, счетчиков, и что самое важное - без затираний. Профит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 15:34:41 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
sharmankaто на этапе, когда конечный размер файла известен, а запись еще не началась Гениально. А если размер файла не известен до записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 15:38:46 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
Покажите код, если не сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 15:39:26 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
BlazkowiczГениально. А если размер файла не известен до записи? Не знаю. Как вариант - сбрасывать в какой-то кеш, обсчитывать длину и по накатанной. cdtyjvПокажите код, если не сложно. Да, конечно. Убрал то, что не относится к теме: Основной файл Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Метод ран: Код: 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.09.2013, 15:51:09 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
Слишком узкоспециализированный код. Нормально подходит только для случаев, когда потоки пишут данные одинаковой длины. Плюс общее количество этих данных должно быть известно заранее. В первом вашем сообщении постановка задачи была более общей, и данные вариант кода ее не решает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 19:16:17 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
sharmankaВсем спасибо, получилось по способу, который я описывал выше. P.S.: Если кому-то интересно, то на этапе, когда конечный размер файла известен, а запись еще не началась создаем пустой файл и назначаем ему длину методом setLength. В нитях же, в зависимости от номера текущей нити пропускаем (номер) * (количество, которое должна записать нить) байт. На выходе имеем запись несколькими нитями одновременно в один файл без всяких локов на файл, счетчиков, и что самое важное - без затираний. Профит. как вариант сферического коня в вакууме для решения абстрактных задач программирования решение вполне достойное а если приложение должно работать хотя бы год без перезагрузки какой размер файла резервировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2013, 10:24:03 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
cdtyjvСлишком узкоспециализированный код. Нормально подходит только для случаев, когда потоки пишут данные одинаковой длины. Плюс общее количество этих данных должно быть известно заранее. В первом вашем сообщении постановка задачи была более общей, и данные вариант кода ее не решает. Та это постоянно такое. Сначала задаётся общий вопрос. На него даётся масса ответов. Затем следует ответ в стиле, "никто не смог помочь, но я молодец нашел решение для своего частного случая". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2013, 10:33:20 |
|
||
|
RandomAccessFile
|
|||
|---|---|---|---|
|
#18+
sharmankaна этапе, когда конечный размер файла известен, а запись еще не началась создаем пустой файл и назначаем ему длину методом setLength. у меня всего два потока, причем точно знаю что первый запишет в файл 20 терабайт, а второй всего 10 байт. что делать если работа планировщика потоков недетерминирована и отличается в зависимости от реализации JVM а я не хочу резервировать 20 терабайт для записи 10 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2013, 10:52:01 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2128543]: |
0ms |
get settings: |
15ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
39ms |
get topic data: |
12ms |
get first new msg: |
9ms |
get forum data: |
4ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 286ms |
| total: | 493ms |

| 0 / 0 |
