Это так же просто, как:
g.V('B').emit().repeat(both().dedup()).toSet()
Вы в основном перемещаетесь в обоих направлениях и излучаете каждую вершину, которую видите, пока не найдете новую вершину.
Когда вы выполняете копирование файлов, большие куски данных считываются и записываются на диск.
Вы читаете весь файл по четыре байта за раз. Это должно быть медленнее. Даже если потоковая реализация достаточно умна для буферизации, у вас все равно будет как минимум 500 & nbsp; MB / 4 = 131072000 вызовов API.
Разве не разумнее просто прочитать большой кусок данных, а затем последовательно просмотреть их и повторять до тех пор, пока файл не будет обработан?
Интересно, чтение всего файла в буфер и просмотр его в памяти имело огромное значение. Это происходит за счет памяти, но у нас ее много.
Это заставляет меня думать, что реализация буфера FileStream (или BufferedStream, если на то пошло) некорректна, потому что независимо от того, какой размер буфера я пробовал, производительность все равно снижалась. ] До 2-5 секунд (зависит от дискового кеша I '
Одно предостережение; вы можете захотеть дважды проверить порядок байтов процессора ... при условии, что little-endian не вполне безопасен (подумайте: itanium и т. д.).
Вы также можете проверить, не BufferedStream
имеет значение (я не уверен).