Binary Data

From mi-linux
Revision as of 16:04, 7 March 2011 by In0316 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

...Back to 5CS004

This is a collection of hints about how to use the Scala and Java APIs to perform simple operations, of the sort you might need to use to complete the portfolio exercises.

Binary data, rather than strings, characters, and so on, is usually represented in Java as arrays of bytes, called byte[] in Java and Array[Byte] in Scala. Being able to convert binary data to and from Strings, sending both sorts of data down sockets is useful things to know about.


How to convert a String to an Array[Byte]

 
val mybytes = "I love Scala programming!".getBytes()
  


Sending Strings and binary data through sockets, or writing them to files

If you are using a Java DataOutputStream (as you saw in the lectures) you can send a String to a DataOutputStream like this:

 
val out = new DataOutputStream(socket.getOutputStream())
out.writeBytes("Hello socket world!")
  

and binary data like this:

 
val out = new DataOutputStream(socket.getOutputStream())
out.write(mybytearray)
  


How to read in a file as a String

val filedata = scala.io.Source.fromFile("file.txt").mkString("")

How to read in a file as binary data

The Scala API for dealing with IO is not very mature, so it's easier here to use the Java API:

 
/** Get the contents of a give file, as a byte array.
 * 
 * We use the Java classes here, a the Scala ones are a bit of a hack.
 * 
 */
def getFileContents(filename : String) : Array[Byte] = {
	val file = new File(filename)
	val fis = new FileInputStream(file)
	val flength : Int = file.length.asInstanceOf[Int]
	var bytearray = new Array[Byte](flength)
	fis.read(bytearray)
	return bytearray
}
  


...Back to 5CS004