     }
 
     func getUInt16() -> UInt16 {
-        return order.toNative(readBytes())
+        return order.toNative(get())
     }
     
     func getUInt32() -> UInt32 {
-        return order.toNative(readBytes())
+        return order.toNative(get())
     }
     
     func getUInt64() -> UInt64 {
-        return order.toNative(readBytes())
+        return order.toNative(get())
     }
     
     func getFloat32() -> Float32 {

        return string
    }
    
    func readUInt8(length: Int) -> Array<UInt8> {
        var values = Array<UInt8>(count: length, repeatedValue: 0)
        
        for index in 0..<length {
            values[index] = getUInt8()
        }
        
        return values
    }
    
    func readUInt8(terminator: UInt8) -> Array<UInt8> {
        var values = Array<UInt8>()
        var done = true
        
        while (!done) {
            let value = getUInt8()
            
            if (value == terminator) {
                done = true
            } else {
                values += value
            }
        }
        
        return values
    }
    
    func readBytes<T>() -> T {
        for index in 0..<sizeof(T) {
            bits[index] = data[position++]
        }

    }
    
    func getUTF8(length: Int) -> String {
        return decodeCodeUnits(getUInt8(length), codec: UTF8())
    }
    
    func getTerminatedUTF8(terminator: UInt8 = 0) -> String {
        return decodeCodeUnits(getTerminatedUInt8(terminator), codec: UTF8())
    }

    func decodeCodeUnits<C : UnicodeCodec>(codeUnits: Array<C.CodeUnit>, var codec: C) -> String {
