BVH文件解析器
简介
对于BVH文件的格式,可以参考:BVH文件格式解析
解析器
使用java编写,具体使用方法:
导入google的gson包,用来生成json:
- 如果是eclipse,下载jar导入到项目中:gson jar下载
- 如果是使用IDEA,则通过File - Project Structure - Modules - Dependencies - +(加号) - Libraries - From Mave, 搜索gson,添加com.google.gson.Gson;
创建
BVHParser
的类对象:
BVHParser parser = new BVHParser();
- 传入bvh文件的绝对路径,调用
parse(String)
方法解析得到json格式的字符串:
String json = parser.parse("your absoulte path of the .bvh file's ");
- 如果要写入文件:
File out = new File("out.json"); // print to a json file
try {
PrintStream ps = new PrintStream(new FileOutputStream(out));
ps.println(json);
} catch (IOException e) {
e.printStackTrace();
} finally {
parser.release();
}
- 最后释放I/O
parser.release();
源码
对于逻辑,部分已在代码中注释
import com.google.gson.Gson;
import java.io.*;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* Parsing the standard .bvh file, some infor cannot be tranfered to json if not a standard .bvh file
* Only get segment's data without motion's data.
* <p>
* The parser need external library: com.google.code.gson:gson
* <p>
* Created by PentonBin on 16-3-23.
*/
public class BVHParser {
private static final String TAG = "BVHParser";
private static final String KEYWORD_HIERARCHY = "HIERARCHY";
private static final String KEYWORD_ROOT = "ROOT";
private static final String KEYWORD_OFFSET = "OFFSET";
private static final String KEYWORD_CHANNELS = "CHANNELS";
private static final String KEYWORD_JOINT = "JOINT";
private static final String KEYWORD_END_SITE = "End Site";
private static final String KEYWORD_MOTION = "MOTION";
private static final String KEYWORD_FRAME = "Frames";
private static final String KEYWORD_FRAME_TIME = "Frame Time";
private static final int NUM_OFFSET = 3;
private static final int NUM_ROOT_CHANNELS = 6;
private static final int NUM_JOINT_CHANNELS = 3;
private BufferedReader mParseReader;
private boolean isReaderMarkConsume = true;