📄 mp3info.java
字号:
/**************************************************************************
* (C) Copyright 2008 by Tao Liuyuan and Zhang Shuitao. *
* All Rights Reserved. *
* *
* Project : KYPlayer *
* File : Mp3Info.java *
* JDK version used : jdk1.6.0_u4 *
* Version : 1.00 *
* Created : 2008.7.6 by we *
*************************************************************************/
package MP3Player;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* mp3信息类
* @author we
*/
public class Mp3Info {
/**
* 自动生成的序列化值
*/
private static final long serialVersionUID = 1L;
/**
* 文件头1-3
*/
private final String TAG = "TAG";
/**
* 歌曲名4-33
*/
private String songName;
/**
* 保留位126
*/
private byte r1;
/**
* 保留位127
*/
private byte r2;
/**
* 保留位128
*/
private byte r3;
/**
* 是否合法
*/
private boolean valid;
/**
* 此歌曲对应的文件名
*/
public transient String fileName;
/**
* 利用128字节初始化的构造函数
* @param mediaFile
*/
public Mp3Info(File mediaFile) {
System.out.println(mediaFile.toURI());
RandomAccessFile ra = null;
try {
ra = new RandomAccessFile(mediaFile, "r");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte[] buffer = new byte[128];
try {
ra.seek(ra.length() - 128);
ra.read(buffer);
ra.close();
} catch (IOException e) {
e.printStackTrace();
}
if (buffer.length != 128) {
throw new RuntimeException("数据长度不合法:" + buffer.length);
}
String tag = new String(buffer, 0, 3);
// 只有前三个字节是TAG才处理后面的字节
if (tag.equalsIgnoreCase("TAG")) {
valid = true;
songName = new String(buffer, 3, 30).trim();
r1 = buffer[125];
r2 = buffer[126];
r3 = buffer[127];
} else {
valid = false;
}
}
/**
* 无参构造函数
*/
public Mp3Info() {
}
/**
* 返回是否合法
* @return true false
*/
public boolean isValid() {
return valid;
}
/**
* 得到此对象的128个字节的表示形式
* @return byte[]
*/
public byte[] getBytes() {
byte[] data = new byte[128];
System.arraycopy(TAG.getBytes(), 0, data, 0, 3);
byte[] temp = songName.getBytes();
System.arraycopy(temp, 0, data, 3, temp.length > 30 ? 30 : temp.length);
System.arraycopy(temp, 0, data, 97, temp.length > 28 ? 28: temp.length);
data[125] = r1;
data[126] = r2;
data[127] = r3;
return data;
}
/**
* r1属性的get方法
* @return byte
*/
public byte getR1() {
return r1;
}
/**
* r1属性的set方法
* @param r1
*/
public void setR1(byte r1) {
this.r1 = r1;
}
/**
* r2属性的get方法
* @return byte
*/
public byte getR2() {
return r2;
}
/**
* r2属性的set方法
* @param r2
*/
public void setR2(byte r2) {
this.r2 = r2;
}
/**
* r3属性的get方法
* @return byte
*/
public byte getR3() {
return r3;
}
/**
* r3属性的set方法
* @param r3
*/
public void setR3(byte r3) {
this.r3 = r3;
}
/**
* songName属性的get方法
* @return String
*/
public String getSongName() {
return songName;
}
/**
* songName属性的set方法
* @param songName
*/
public void setSongName(String songName) {
if (songName == null) {
throw new NullPointerException("歌名不能是null!");
}
valid = true;
this.songName = songName;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -