想用Java修改一个音频文件.ogg的标题,类似像千千静音里修改文件属性,标题、歌手名什么的可能由于是2进制文件,所以修改保存后的音频文件被破坏,不能用了。请问各位大侠有什么办法解决没有?  
以下是我的程序: 
           FileInputStream bis = new FileInputStream(new File("e:/111.ogg"));
            FileOutputStream bos = new FileOutputStream(new File("e:/222.ogg"));
            byte b[]=new byte[1024];
            int read=0;
            int i=0;
            while((read=bis.read(b, 0, 1024))!=-1){
                if(i==0){
                    String s=new String(b);
                    String ss=s.substring(0,162)+"Title=你好  "+s.substring(174,s.length());
                    byte c[]=ss.getBytes();
                    i=1;
                    bos.write(c);
                }else{
                    bos.write(b,0, read);
                }
            }
            bis.close();
            bos.close();

解决方案 »

  1.   

    你确定ogg文件的前1024个byte的数据是它的描述信息存储位置?
    如果不全部是的话你的操作就有问题了。我只知道MP3格式的是用最后128位byte存储描述信息。
    你把非描述信息读入String类型内部的话会进行字符编码,解码出来应该和原来的2进制不相同了。
      

  2.   

    谢谢!明白你的意思,前1024个byte里的有一段"Title=XXXX"是标题。
    我是把整个byte读入String,来确定Title的位置,如你所说应该是影响了其他非描述信息。
    我去试试每次只取128byte修改。
    或者有没有什么方法能够使这些信息读到String里修改后能还原到文件里?