字节数组字符串返回字节数组 - 性能明智

时间:2014-04-21 10:10:44

标签: java android arrays performance bytearray

我收到一个byte[],其中包含数据(这是String,已转换为byte[])。我需要检查byte[]是否包含String。像(伪代码):

byte[] b = ...;
b.contains("something");

如果它包含"某些东西"然后我需要将byte[]拆分为较小的byte[],然后将所有较小的byte[]加入一个byte[]

我会这样做:

    // fileData is my original byte[]
    final String fileDataStr = new String(fileData, "UTF-8");
    final ArrayList<byte[]> list1 = new ArrayList<byte[]>();
    final ArrayList<byte[]> list2 = new ArrayList<byte[]>();
    final ArrayList<byte[]> list3 = new ArrayList<byte[]>();

    if(fileDataStr.contains("VERSION:"))
    {
        Pattern pattern = Pattern.compile("(BEGIN:VCARD.*?END:VCARD)", Pattern.DOTALL);
        Matcher m = pattern.matcher(fileDataStr);

        while (m.find()) 
        {
            Log.d(TAG, "Getting vcard per vcard");
            final String subVcard = m.group(1);

            Pattern p = Pattern.compile("(\\d+)");
            Matcher m2 = p.matcher(subVcard);

            // Search for the vcard version
            if (m2.find()) 
            {
                if("2".equalsIgnoreCase(m2.group(1)))
                {
                    list1.add(subVcard.getBytes());
                }
                else if("3".equalsIgnoreCase(m2.group(1)))
                {
                    list2.add(subVcard.getBytes());
                }
                else if("4".equalsIgnoreCase(m2.group(1)))
                {
                    list3.add(subVcard.getBytes());
                }
            }
            else
            {
                Log.d(TAG, "No vcard version found!");
            }
        }
    }

    // Convert the ArrayList to an Array
    final Object[] aux1 = list1.toArray();
    final Object[] aux2 = list2.toArray();
    final Object[] aux3 = list3.toArray();

    // Convert each array to a single byte[]
    final byte[] myByteArray = new byte[aux1.length + aux2.length + aux3.length];
    System.arraycopy(aux1, 0, myByteArray, 0, aux1.length);
    System.arraycopy(aux2, 0, myByteArray, myByteArray.length, aux2.length);
    System.arraycopy(aux3, 0, myByteArray, myByteArray.length, aux3.length);

    // The inputstream
    final InputStream myInputStream = new ByteArrayInputStream(myByteArray);

我想要解决此问题的方法是将原始byte []转换为String。将String与我的&#34;比较&#34;并将字符串重新转换回byte [],但我觉得这不是最有效的方法,或者我错了?

我在Android上与大String合作,我需要这样做才能获得不错的效果。

有任何建议吗?

0 个答案:

没有答案