java代码优化问题

weng4570 发布于 2013/10/10 15:12
阅读 222
收藏 0

我这代码有点乱谁能帮忙优化一下;小弟是刚学不久;有些还不太会;E:/pcm//pp/RawAudiowav.pcm文件的链接是这个;可以下载下来看一下。http://download.csdn.net/download/weng4570/6377713   ;非常感谢

public class Copy_2_of_ascci_new {

    private static long  startTime1 = System.currentTimeMillis(); 
    
    public static void main(String[] args) {
        readFileByBytes();       
    }

    public static void readFileByBytes() {
        File file = new File("E:/pcm//pp/RawAudiowav.pcm");
        System.out.println(file);
        InputStream in = null;
        try {
            // 一次读多个字节
            byte[] tempbytes = new byte[(int) file.length()];
            int byteread = 0;
            in = new FileInputStream(file);


            // 读入多个字节到字节数组中,byteread为一次读入的字节数
            while ((byteread = in.read(tempbytes)) != -1) {

                printHexString(tempbytes);
            }

        } catch (Exception e1) {
            e1.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e1) {
                }
            }
        }
    }

    public static void printHexString(byte[] tempbytes) throws IOException {
         StringBuilder sb_1=new StringBuilder(tempbytes.length);
        
        for (int i = 0; i < tempbytes.length; i++) {
            String hex = Integer.toHexString(tempbytes[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb_1.append(hex.toUpperCase());               //得到FF7F数据
        }
        pcmwrite(sb_1);

    }

    private static void pcmwrite(StringBuilder sb_1) throws IOException {
        
        StringBuffer sb = new StringBuffer(sb_1.length());      
         int sc = Integer.parseInt("8000", 16);       
         String xx = sb_1.toString();
       
         for (int i = 0; i < xx.length();) {       

             String temp = xx.substring(i, i + 4);    

           //System.out.println(temp);

          // 将传入的参数,转换为 16 进制数
             int tt = Integer.parseInt(temp, 16);       
             if (sc > tt) {      
                 sb.append("0");       
             } else {       
                 sb.append("1");      
             }       
             i += 4;       
         }       


      pcm_write_1(sb);
        
    }


    private static void pcm_write_1(StringBuffer sb) {

//        String info = getfile();
        String info = sb.toString();
        String s = info;
        List<int[]> list = new ArrayList<int[]>();
        Character c = null;
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            Character cc = s.charAt(i);
            if (c == null) {
                c = cc;
                count++;
            } else {
                if (c.equals(cc)) {
                    count++;
                } else {
                    int[] temp = new int[2];
                    temp[0] = Integer.parseInt(c.toString());
                    temp[1] = count;
                    list.add(temp);
                    count = 0;
                    c = cc;
                    count++;
                }
            }
        }
        int[] temp = new int[2];
        temp[0] = Integer.parseInt(c.toString());
        temp[1] = count;
        list.add(temp);
        for (int[] o : list) { // 增强型for循环,list是什么类型o就必须是什么类型
            System.out.println(o[0] + "\t" + o[1]); // 打印数据temp的数个对应的个数;
        }


//        StringBuffer answer = new StringBuffer("");
        StringBuffer answer = new StringBuffer(sb.length());
        int n = -1;
        boolean start = false;
        for (int i = 0; i < list.size(); i++) {
            if (n == -1 && start == false) {
                if ((list.get(i))[0] == 0) {
                } else {
                    start = true;
                    n = 1;
                }
            } else if (start == true && n == -1) {
                if (list.get(i)[1] <= 7) {
                    n = list.get(i)[0];
                }
            } else {
                if ((list.get(i))[0] == 0 && n == 1) {
                    answer.append('1');
                    n = -1;
                    if ((list.get(i))[1] >= 8 && (list.get(i))[1] < 14) {
                        n = 0;
                    }
                    if ((list.get(i))[1] >= 14) {
                        n = -1;
                    }
                } else if ((list.get(i))[0] == 1 && n == 0) {// 当前一个数为0是,因为1不会超过9个,所以不用加判断。
                    answer.append('0');
                    n = -1;
                    if ((list.get(i))[1] >= 8 && (list.get(i))[1] < 14) {
                        n = 1;
                    }
                    if ((list.get(i))[1] >= 14) {
                        n = -1;
                    }
                }
            }
        }
        System.out.println(answer);
        ascii(answer);
//       


    }

    private static void ascii(StringBuffer answer) {
//        // TODO Auto-generated method stub
        String info = answer.toString();
        System.out.println(binToAscii(info));
        FileOutputStream fos = null;
        BufferedWriter bw = null;
        try {
            fos = new FileOutputStream("E:/pcm/aaBBcc_444_11.txt");
            bw = new BufferedWriter(new OutputStreamWriter(fos));
            bw.append(binToAscii(info));
            bw.flush();
            bw.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
        long endTime1 = System.currentTimeMillis();   
        System.out.println("使用缓冲区读取耗时:" + (endTime1 - startTime1) +"ms");   

    }

    static String binToAscii(String bin) {
        String ret = "";
        String regEx = "(10[1|0][1|0][1|0][1|0][1|0][1|0][1|0][1|0])";
        Pattern pat = Pattern.compile(regEx);
        Matcher mat = pat.matcher(bin);
        boolean rs = mat.find();
        int si = 0;
        while (rs) {
            String chars = mat.group(0);
            int nsi = bin.indexOf(chars, si);           //nsi长度是10
            nsi += chars.length();
            rs = mat.find(nsi);
            si = nsi;
            String obin = chars.substring(2);
            StringBuffer sb = new StringBuffer(obin);
            obin = sb.reverse().toString();
//            System.out.println(obin);
            ret = ret + (char) Integer.parseInt(obin, 2);
        }
        return ret;
    }


}

以下是问题补充:

@weng4570:RawAudiowav.pcm文件要用UitraEdit编辑器好像才能看到;看不到也没有关系;这里有连接截图http://www.apkbus.com/android-143246-1-1.html (2013/10/10 15:20)
加载中
0
weng4570
weng4570
顶;我顶
0
LucEsape
LucEsape
先代码高亮。
weng4570
weng4570
回复 @青柠柚子 : 不知道怎么弄;哥们你可以复杂下来到eclipse中呀;这样方便看
LucEsape
LucEsape
回复 @weng4570 : 代码格式化 高亮显示。 这样看太伤眼。
weng4570
weng4570
没有看懂哥们的意思;什么高亮;指的是!
0
weng4570
weng4570
我再顶;求解答
weng4570
weng4570
为什么呀;我头都大了现在,急死了;真心求解决呀。难住小弟了
Gillian_Male
Gillian_Male
别顶了。。。没人看的。。。
返回顶部
顶部