What is the difference between a byte array & byte buffer ?
Also, in what situations should one be preferred over the other?
[my usecase is for a web application being developed in java].
ByteArray is an extremely powerful Class that can be used for many things related to data manipulation, including (but not limited to) saving game data online, encrypting data, compressing data, and converting a BitmapData object to a PNG or JPG file.
Byte and char arrays are often used in Java to temporarily store data internally in an application. As such arrays are also a common source or destination of data. You may also prefer to load a file into an array, if you need to access the contents of that file a lot while the program is running.
A byte is the unit most computers use to represent a character such as a letter, number or typographic symbol. Each byte can hold a string of bits that need to be used in a larger unit for application purposes. As an example, a stream of bits can constitute a visual image for a program that displays images.
Python bytearray() Function The bytearray() function returns a bytearray object. It can convert objects into bytearray objects, or create empty bytearray object of the specified size.
There are actually a number of ways to work with bytes. And I agree that it's not always easy to pick the best one:
byte[]
java.nio.ByteBuffer
java.io.ByteArrayOutputStream
(in combination with other streams)java.util.BitSet
The byte[]
is just a primitive array, just containing the raw data. So, it does not have convenient methods for building or manipulating the content.
A ByteBuffer
is more like a builder. It creates a byte[]
. Unlike arrays, it has more convenient helper methods. (e.g. the append(byte)
method). It's not that straightforward in terms of usage. (Most tutorials are way too complicated or of poor quality, but this one will get you somewhere. Take it one step further? then read about the many pitfalls.)
You could be tempted to say that a ByteBuffer
does to byte[]
, what a StringBuilder
does for String
. But there is a specific difference/shortcoming of the ByteBuffer
class. Although it may appear that a bytebuffer resizes automatically while you add elements, the ByteBuffer
actually has a fixed capacity. When you instantiate it, you already have to specify the maximum size of the buffer.
That's one of the reasons, why I often prefer to use the ByteArrayOutputStream
because it automatically resizes, just like an ArrayList
does. (It has a toByteArray()
method). Sometimes it's practical, to wrap it in a DataOutputStream
. The advantage is that you will have some additional convenience calls, (e.g. writeShort(int)
if you need to write 2 bytes.)
BitSet
comes in handy when you want to perform bit-level operations. You can get/set individual bits, and it has logical operator methods like xor()
. (The toByteArray()
method was only introduced in java 7.)
Of course depending on your needs you can combine all of them to build your byte[]
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With