Size: a a a

2020 May 25

h

humanoid in Haskell
Alexander Vershilov
Какие типы/методы внутри используются?
Только ByteString
источник

h

humanoid in Haskell
lazy
источник

AV

Alexander Vershilov in Haskell
Насколько я знаю hSetBuffering не должен влиять на работу с ByteString
источник

AV

Alexander Vershilov in Haskell
hGet будет принимать не больше чем попросят, hGetContent читает увеличивающимися чанками, hReadFile читает весь файл (в строгих байтостроках)
источник

AV

Alexander Vershilov in Haskell
В ленивых читается чанками по 32k по мере их запрашивания
источник

AV

Alexander Vershilov in Haskell
Копировать файл из одного места в другое, кажется лучше sendFile-ом (если linux only подходит)
источник

AV

Alexander Vershilov in Haskell
Ну или copyFile из System.Directory
источник

h

humanoid in Haskell
Alexander Vershilov
hGet будет принимать не больше чем попросят, hGetContent читает увеличивающимися чанками, hReadFile читает весь файл (в строгих байтостроках)
Ну вот hGetContent читаю ByteString lazy, но если я указал буффер 128мб например, он считает из файла 128мб или 32k?
источник

AV

Alexander Vershilov in Haskell
Цитирую haddock:

> This function reads chunks at a time, increasing the chunk size on each read. The final string is then reallocated to the appropriate size. For files > half of available memory, this may lead to memory exhaustion. Consider using readFile in this case.
источник

AV

Alexander Vershilov in Haskell
А стоп извини
источник

AV

Alexander Vershilov in Haskell
> Read entire handle contents lazily into a ByteString. Chunks are read on demand, using the default chunk size.

32k
источник

AV

Alexander Vershilov in Haskell
defaultChunkSize :: Int
defaultChunkSize = 32 * k - chunkOverhead
  where k = 1024
источник

AV

Alexander Vershilov in Haskell
Точнее так
источник

h

humanoid in Haskell
Alexander Vershilov
> Read entire handle contents lazily into a ByteString. Chunks are read on demand, using the default chunk size.

32k
Я к тому, что мб считывается из файла сначала указанный буффер, а потом уже отпиливаются куски по 32k в массивчики-чанки?
источник

JS

Jerzy Syrowiecki in Haskell
humanoid
Плиз, можете кратко дать немного понимания) Чем отличаются hSetBuffering от Data.ByteString.Lazy с его 32k ? По скольку будет считываться с файла если мы будет использовать буффер и lazy ByteString?
буфер IO влияет на IO (не lazy) операции. ByteStringLazy не знает ничего про файлы. ByteString.Lazy.readFile для ленивости использует свой отдельный буфер в обход стандартного IO-буфера
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
буфер IO влияет на IO (не lazy) операции. ByteStringLazy не знает ничего про файлы. ByteString.Lazy.readFile для ленивости использует свой отдельный буфер в обход стандартного IO-буфера
настройки буферизации хэндла не влияют на ByteString.Lazy.readFile
источник

JS

Jerzy Syrowiecki in Haskell
это я исходники почитал
источник

h

humanoid in Haskell
Jerzy Syrowiecki
буфер IO влияет на IO (не lazy) операции. ByteStringLazy не знает ничего про файлы. ByteString.Lazy.readFile для ленивости использует свой отдельный буфер в обход стандартного IO-буфера
UPD: А то есть hSetBuffering это ток касается System.Io и Стрингов ?
источник

JS

Jerzy Syrowiecki in Haskell
humanoid
UPD: А то есть hSetBuffering это ток касается System.Io и Стрингов ?
возможно, ещё чего-то
источник

JS

Jerzy Syrowiecki in Haskell
humanoid
UPD: А то есть hSetBuffering это ток касается System.Io и Стрингов ?
ByteString.Lazy тоже использует System.IO, но только те функции, которые обходят стандартный буфер
источник