C# Byte Array

Byte type

Byte arrays store binary data. This data may be part of a data file, image file, compressed file, downloaded server response, or many other files. With byte arrays, we have an ideal representation of this data.

Byte

Tip:The byte array type allows you to store low-level representations. It is useful when optimizing certain methods.

Example

Program icon

This program shows how to allocate a byte array on the managed heap in the C# language. The program also measures the memory usage of the managed heap before and after this allocation occurs.

Also:The program demonstrates that a byte array is a precise representation of bytes, not a higher-level construct.

Program that allocates byte array: C#

using System;

class Program
{
    static void Main()
    {
	byte[] array1 = null;
	//
	// Allocate three million bytes and measure memory usage.
	//
	long bytes1 = GC.GetTotalMemory(false);
	array1 = new byte[1000 * 1000 * 3];
	array1[0] = 0;
	long bytes2 = GC.GetTotalMemory(false);
	Console.WriteLine(bytes2 - bytes1);
    }
}

Output

3000032
Garbage collection visualization

Memory usage of byte array. The program begins its execution at the Main entry point. The GC.GetTotalMemory method first gathers the memory usage figures from the system before and after the allocation of the byte array.

GC.GetTotalMemory

Then:The byte array variable is assigned a reference to three million bytes in an array allocated on the managed heap.

Array

The program proves that allocating a three million element array of bytes on the managed heap causes three million bytes to be added to the memory usage of the program. The byte type is a low-level type that has minimal overhead.

ValueType Examples: Int, DateTime

Read bytes

File

You can read in a byte array from a file using the C# language and the System.IO namespace. The easiest way to read a file into a binary array is the File.ReadAllBytes static public method in the File class.

File.ReadAllBytes

Seek, read

You can use the Seek method on some Stream classes to read a part of a file into a byte array. It is faster to read in an entire byte array from a file at once. This more effectively uses the file system's buffering.

Seek

And:You will find that byte arrays are used in many file input/output programs.

ASP.NET

ASPNET web programming framework

The ASP.NET Framework makes extensive use of byte arrays in its internal code and also in some public interfaces. You can use the BinaryWrite method and provide a byte array parameter to achieve a fast write to the HTTP response.

Note:Some websites use this approach to optimize server-side performance. Byte arrays are used frequently in this approach.

Response.BinaryWrite

Manipulate

It is also possible to modify the contents and length of a byte array. We show how to rewrite a binary file encoded in GZIP to remove parts of the binary format, resulting in superior data compression.

Tip:You can rewrite some byte arrays that contain images or other binary formats and manipulate these kinds of files.

GZIP Header Flag Byte

Test elements

Array type

We can test the elements in a byte array. If you have a GZIP file in an array, you can test the first two elements and the length. This tells us if the file contains the correct magic header bytes defined in the file format specification.

Note:This process is also called "data sniffing" and is used constantly on the Internet and in web browsers.

GZIP File Test

Download

You can download data over the Internet or other network with a network connection using the WebClient class in the C# language. The WebClient provides a way to directly access the bytes of any server's response.

Tip:The data it returns is stored in a byte array. This is useful for scraping web sites or automating tedious Internet tasks.

WebClient

GZipStream

GZIP compression

The GZipStream class allows you to use a byte array buffer for expanding or compressing GZIP-encoded data. The GZipStream class is the easiest way to implement compression or decompression for web applications.

GZipStream

File system caching

Cache

With byte arrays, you are usually just storing the exact data from the file system in the memory of your program. In some cases, this actually duplicates the Windows file system cache mechanism that is optimized for this exact purpose.

Note:Byte array caches on the file system can improve or degrade performance in various situations.

BinaryReader

The BinaryReader class allows you to imperatively read in a binary file with more helper methods than testing the bytes yourself. The BinaryReader class allows you to easily transform individual bytes into integers or strings.

BinaryReader

Summary

C# programming language

We looked at the byte array type, seeing its memory allocation statistics. Next we provided pointers to other articles that focus on the byte array type in practical programming tasks.

So:Byte arrays provide an accurate machine representation of binary data that is addressable by byte positions.


C#: Array