精华帖 (1) :: 良好帖 (13) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-02
最后修改:2009-08-02
注意: 本项目的所有代码已移到google code,此前在sourceforge和java.net项目不再维护了,现在项目的地址为: http://code.google.com/p/yoyoplayer 在使用过程中有任何问题,都欢迎在此留言。
1.2更新[2009-08-02] http://yoyoplayer.googlecode.com/files/YOYOPlayer1.2.zip
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-02
下了。。。蛮不错的。。。
ps.我的女朋友也叫Yoyo,缘分阿~~^_^ |
|
返回顶楼 | |
发表时间:2009-08-02
Laynepeng 写道 下了。。。蛮不错的。。。
ps.我的女朋友也叫Yoyo,缘分阿~~^_^ 不会是一个人把 |
|
返回顶楼 | |
发表时间:2009-08-04
看了一点源代码,我觉得作者对于java字符串理解还是不深刻。
在一个Util类里面我看到这样一个函数 public static String convertString(String source, String encoding) { try { byte[] data = source.getBytes("ISO8859-1"); return new String(data, encoding); } catch (UnsupportedEncodingException ex) { return source; } } 这个函数的意图似乎叫做转换,但是它的输入是String类型的东西,输出也是String类型的东西,这个过程你是转不了什么的,这是一个没意义的操作。 当我们定义String a ="天下";请问a变量指向的String对象里面存储的二进制形式是什么?答案必然是对"天下"这两个字符以某种编码方案的编码后的二进制内容。那么是什么编码方案呢?正如java宣称的那样是Unicode。没错,所谓java支持Unicode就是这个意思。现在我们来看这个函数,传进来一个source,然后执行这个source.getBytes("ISO8859-1")。这个什么意思呢?就是说将source指向的String对象内容以这个ISO8859-1编码方案编码输出,但是请注意source指向的String对象本身的内容还是原来的Unicode的形式,只是输出符合ISO8859-1编码的一堆byte。接下来做了这个return new String(data, encoding);这个干什么呢?以某种编码方案对某堆byte进行解析,解完后构造的String对象内部还是要以Unicode形式存储的。然后来说说这个“某种编码方案对某堆byte的解析”如果匹配那自然没有问题,如果不匹配那就可能出现问题。现在从这一句byte[] data = source.getBytes("ISO8859-1");来看这堆byte是ISO8859-1编码方案生成的,那么如果以非ISO8859-1的编码方案去解这堆byte很可能出问题。 所以如果我这样 String test = "安西四镇"; String rs = convertString(test,"GBK"); System.err.println(rs); rs打印出来是四个???? 现在假如我把你的那个函数改成 public static String convertString(String source, String encoding) { try { byte[] data = source.getBytes("UTF-8"); return new String(data, encoding); } catch (UnsupportedEncodingException ex) { return source; } } String test = "安西四镇"; String rs = convertString(test,"UTF-8"); System.err.println(rs); 这样打印出"安西四镇",没错,但是这是在做无用功。 String test = "安西四镇"; String rs = convertString(test,"GBK"); System.err.println(rs); 这样打印出"瀹夎タ鍥涢晣",乱码。 String对象到String对象的转换时没有意义的,要么瞎折腾,无用功,要么反而折腾的出错了。因为String对象对于字符一直是以Unicode形式存储的,它可以按某个编码方案输出一堆byte,也可以按某个编码方案从一堆byte解析,但是最终在内存的存储都是Unicode形式。只有当你要与外围(网络,文件,。。。)打交道的时候才会考虑转码,解码问题,两个String对象之间这不是瞎折腾吗。 |
|
返回顶楼 | |
发表时间:2009-08-15
偶太低级,下载了这个播放器了,都不知道怎么用...
|
|
返回顶楼 | |
发表时间:2009-08-26
哈哈,我找做LRC歌词的资料,搜索到这里来了。
我准备用swt/jface做个,才没做几天(上班要搞j2ee,下班做做学习学习),可以看看偶的博客http://user.qzone.qq.com/345343747/blog/1251030474,我是超级科比迷 |
|
返回顶楼 | |
发表时间:2009-08-26
carlkkx 写道 看了一点源代码,我觉得作者对于java字符串理解还是不深刻。
在一个Util类里面我看到这样一个函数 public static String convertString(String source, String encoding) { try { byte[] data = source.getBytes("ISO8859-1"); return new String(data, encoding); } catch (UnsupportedEncodingException ex) { return source; } } 这个函数的意图似乎叫做转换,但是它的输入是String类型的东西,输出也是String类型的东西,这个过程你是转不了什么的,这是一个没意义的操作。 当我们定义String a ="天下";请问a变量指向的String对象里面存储的二进制形式是什么?答案必然是对"天下"这两个字符以某种编码方案的编码后的二进制内容。那么是什么编码方案呢?正如java宣称的那样是Unicode。没错,所谓java支持Unicode就是这个意思。现在我们来看这个函数,传进来一个source,然后执行这个source.getBytes("ISO8859-1")。这个什么意思呢?就是说将source指向的String对象内容以这个ISO8859-1编码方案编码输出,但是请注意source指向的String对象本身的内容还是原来的Unicode的形式,只是输出符合ISO8859-1编码的一堆byte。接下来做了这个return new String(data, encoding);这个干什么呢?以某种编码方案对某堆byte进行解析,解完后构造的String对象内部还是要以Unicode形式存储的。然后来说说这个“某种编码方案对某堆byte的解析”如果匹配那自然没有问题,如果不匹配那就可能出现问题。现在从这一句byte[] data = source.getBytes("ISO8859-1");来看这堆byte是ISO8859-1编码方案生成的,那么如果以非ISO8859-1的编码方案去解这堆byte很可能出问题。 所以如果我这样 String test = "安西四镇"; String rs = convertString(test,"GBK"); System.err.println(rs); rs打印出来是四个???? 现在假如我把你的那个函数改成 public static String convertString(String source, String encoding) { try { byte[] data = source.getBytes("UTF-8"); return new String(data, encoding); } catch (UnsupportedEncodingException ex) { return source; } } String test = "安西四镇"; String rs = convertString(test,"UTF-8"); System.err.println(rs); 这样打印出"安西四镇",没错,但是这是在做无用功。 String test = "安西四镇"; String rs = convertString(test,"GBK"); System.err.println(rs); 这样打印出"瀹夎タ鍥涢晣",乱码。 String对象到String对象的转换时没有意义的,要么瞎折腾,无用功,要么反而折腾的出错了。因为String对象对于字符一直是以Unicode形式存储的,它可以按某个编码方案输出一堆byte,也可以按某个编码方案从一堆byte解析,但是最终在内存的存储都是Unicode形式。只有当你要与外围(网络,文件,。。。)打交道的时候才会考虑转码,解码问题,两个String对象之间这不是瞎折腾吗。 有时候你拿到的string就是乱码形式,所以需要通过这类函数来重新encode一下字节数组吧 比如String param = request.getParameter("某参数"),得到的值是???? 按照最粗浅的做法就是 new String(param.getBytes("某编码"),"某编码")。 这实际上就是楼主做法的含义所在,有什么问题嘛? |
|
返回顶楼 | |
发表时间:2009-08-26
下来试了试,效果不错呀
|
|
返回顶楼 | |
发表时间:2009-09-10
Object真鼻祖啊...
|
|
返回顶楼 | |
发表时间:2009-11-12
先赞一个,不知道有没有实现频谱功能。
|
|
返回顶楼 | |