On Monday, January 6, 2020 8:52:01 AM MST Steven Schveighoffer via Digitalmars-d-learn wrote: > On 1/6/20 5:07 AM, WebFreak001 wrote: > > I was wondering, how are you supposed to use std.file : read in @safe > > code when it returns a void[] but you want to get all bytes in the file? > > > > Is void[] really the correct type it should be returning instead of > > ubyte[] when it just reads a (binary) file to memory? Or should void[] > > actually be castable to ubyte[] in @safe code? > > I feel like this conversation has been had before. But I think it should > be ubyte[]. Not sure why it's void[]. Perhaps for symmetry with write, > which takes void[] (for good reason)?
I think that in previous discussions, it was decided that in general, when you're dealing with something like reading from / write to a file or a socket, writing should accept void[], because then you can write any binary data to it without casting (including objects which are being serialized), whereas reading should give you ubyte[] or const(ubyte)[], because what you're getting from the OS is bytes of data, and it's up to the program to figure out what to do with them. - Jonathan M Davis