Can I cast a byte[] to another primitive[] without copying memory?

I’m using File.ReadAllBytes to read a file that stores short values (2-byte data). I’m getting a byte returned.
I was wondering if it was possible to cast or reinterpret the byte to a short without copying any memory. I am aware that you can cast spans, but I need an array as output, I also cant use pointers to reinterpret it because I have to send the data to GPU using “ComputeBuffer.SetData”. Alternatively some way of directly reading the data form disk to short would also work, something like “File.ReadShort” (example), or if It is possible to send a byte to GPU and have the Compute Sahder interpret it as a short array would also work.
I know that this optimization is redundant in the big picture but I was surprised that i couldn’t find any built-int method to do this, even in unsafe context, so I’m curios if it is even possible to do in C#.
Thanks in advance!

Use FileStream via constructor or File.OpenRead. The stream has a Length property that can be used to resolve the length of the short array you want (decide how you want to deal with data with a length that is not a multiple of 2). On newer versions of .NET, there is a method Stream.ReadExactly that fills a buffer to the exact amount required. Since that isn’t available in .NET Standard 2.1, grab any implementation of a method that does such a thing. Example:

static void ReadFill(this Stream stream, Span<byte> buffer)
{
    while(!buffer.IsEmpty)
    {
        int read = stream.Read(buffer);
        if (read == 0)
        {
            throw new EndOfStreamException();
        }
        buffer = buffer[read..];
    }
}

You can pass the short array with MemoryMarshal.Cast<short, byte>(…)