2009-11-06 154 views
0

有小问题,非常感谢帮助:)字节数组字符串

我应该字节数组转换为字符串,并得到这个输出字符串:“[0,0,0,0]” 之后另一种方法应该将字符串作为输入并从第一个字符串中检索字节数组。

我得到的错误,我有number.format异常,所以我想我应该以其他方式convertToString方法。 这是我到目前为止有:

import java.io.ByteArrayOutputStream; 
import java.util.StringTokenizer; 


public class byteToString { 

    public String convertToString(){ 
     byte[] byteArray = new byte[] {91,79,44,32,79,44,32,79,44,32,79,93}; 
     String holder = new String(byteArray); 
     return holder; 

    } 
    /*was told to use this code to convert back*/ 
     private static byte[] toByteArray(String myString){ 
     myString = myString.substring(0, myString.length()- 1).substring(1); 
     ByteArrayOutputStream myStream = new ByteArrayOutputStream(); 
     for (StringTokenizer myTok = new StringTokenizer(myString, ","); myTok.hasMoreTokens();){ 
      myStream.write(Byte.parseByte(myTok.nextToken().trim())); 
     } 
     return myStream.toByteArray(); 

    } 
    public static void main(String[] args){ 
     String myString = new byteToString().convertToString(); 

     toByteArray(myString); 


    } 
} 

提前谢谢! :)

+0

参见'Arrays.toString(字节[])'http://java.sun.com/javase/6/docs/api/ java/util/Arrays.html#toString(byte []) – McDowell 2009-11-06 10:09:35

回答

3

new byte[] {91,79,44,32,79,44,32,79,44,32,79,93}实际上是[O, O, O, O]阵列的不是 ES!代替使用new byte[] {91,48,44,32,48,44,32,48,44,32,48,93}

而且要注意的是,你可以使用:

myString = myString.substring(1, myString.length() - 1);

代替:

myString = myString.substring(0, myString.length()- 1).substring(1);

它更有效率。

0
public class AAA { 

    public static final byte[] TEST_DATA = {91, 79, 44, 32, 79, 44, 32, 79, 44, 32, 79, 93}; 

    public String convertToString(byte[] array) { 
     return Arrays.toString(array); 
    } 

    private static byte[] toByteArray(String myString) { 
     ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 
     Pattern pattern = Pattern.compile("\\D*(\\d+)"); 
     Matcher matcher = pattern.matcher(myString); 
     while (matcher.find()) { 
      bOut.write((byte)Integer.parseInt(matcher.group(1))); 
     } 
     return bOut.toByteArray(); 
    } 

    public static void main(String[] args) { 
     String myString = new AAA().convertToString(TEST_DATA); 
     byte[] bytes = toByteArray(myString); 
     System.out.println("Test " + (Arrays.equals(bytes, TEST_DATA) ? "passed" : "failed")); 
    } 
} 
+0

优雅的解决方案,thanx!但由于某种原因,我需要使用我编写的toByteArray方法中的代码.... – Angela 2009-11-06 10:27:06

0

为ByteArray的字符串简单的解决方案是下面

public class ByteArrayToString { 
      public static void main(String args[]) { 
       byte[] random = new byte[] { 34, 65, 54 , 76, 66, 65, 66, 70, -10 }; 
       String utf = new String(random, "UTF-8"); 
       String cp1252 = new String(random, "Cp1252"); 
       String windows1252 = new String(random, "Windows-1252"); 
       System.out.println("String created from byte `enter code here`array in UTF-8 encoding : "+ utf); 
       System.out.println("byte array to String in Cp1252 encoding : " + cp1252); 
       System.out.println("byte array to String in Windows-1252 encoding : "+ windows1252); 
      } 
     }