public boolean open(String spec, String title) throws IOException {
		String s1 = spec.substring(spec.lastIndexOf("/") + 1);
		String s2 = URLDecoder.decode(s1, "GBK");
		s1 = URLDecoder.decode(s1, "UTF-8");
		if (s1.length() > s2.length())
			s1 = s2;
		if(audio != null && title != null)
			audio.refreshMessage(title);

		connection.open(new URL(spec), null);
		int code = connection.getResponseCode();
		if (code < 200 || code >= 300)
			return printErrMsg("URL Connection Fails. ResponseCode: " + code
					+ ", ResponseMessage: " + connection.getResponseMessage());

		/*s2 = connect.getHeaderField("Content-Type");
		if(s2 == null || s2.startsWith("audio") == false)
			return printErrMsg("Illegal Content-Type: " + s2);*/

		if ((length = connection.getContentLength()) <= 0)
			return printErrMsg("Failed to get file length.");

		System.out.println("\nPLAY>> " + s1);

		acceptRanges = "bytes".equals(connection.getHeaderField("Accept-Ranges"));
		//if(!acceptRanges)
		//	System.out.println(url.getHost() + ": not support multi-threaded downloads.");

		// 创建"写"线程
		Writer w = new Writer();
		w.setName("writer_thrad");
		w.setPriority(Thread.NORM_PRIORITY + 2);
		w.start();

		return true;
	}