2013-05-26 35 views
1

正如標題所說,我不能區別getBytes[]serialization mechanismString。下面是getBytes[]serialization mechanism之間的測試:{getBytes和使用String序列化有什麼區別?

byte[] result = null; 
ObjectOutputStream oos = null; 
ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); 
try { 
    oos = new ObjectOutputStream(byteArray); 
    try { 
     oos.writeUTF(data); 
     oos.flush(); 
     result = byteArray.toByteArray(); 
    } finally { 
     oos.close(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

return result; 

}

公共靜態字節[] serUTFString(字符串數據)

當我設置:

public void testUTF() { 

     byte[] data = SerializeUtil.serUTFString(str); 
     System.out.println(data.length); 
     System.out.println(str.getBytes().length); 
    } 

這裏是SerializeUtilstrRedis,都可以正常工作,但getBytes[]似乎更有效。由於他們都從String返回byte array,有什麼區別,serialization是必要的?

+0

當然你發現字節數組長度不同,包含不同的數據? – EJP

回答

2

String.getBytes()返回一個字節數組,用於重新插入默認編碼中的字符串字符。 ObjectOutputStream.writeUTF以已修改的UTF-8格式寫入字符串長度,然後寫入字節,請參閱java.io.DataOutput API。

+0

+1。 'ObjectOutputStream'也寫入一個流標頭供'ObjectInputStream.'使用。由於OP不調用'writeObject',ObjectOutputStream而不是'DataOutputStream'的使用是毫無意義的。 – EJP

+0

但是如果我在ObjectOutputStream中用writeBytes(String)替換writeUTF會怎樣? – znlyj

相關問題