Java VCF 格式解析
vcf可以用记事本打开,格式如下:
BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0=E4=B8=89;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0=E4=B8=89
TEL;VOICE;PREF:1-370-000-0000
PHOTO;ENCODING=BASE64;PNG:iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAA。。。。
END:VCARD
java code:
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import javax.imageio.ImageIO;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class VCFTest {
public static void main(String[] args) {
String name = "张三";
VCFTest vt =new VCFTest();
try {
//将字符串转换成utf-8 quoted-printable 格式
String str = vt.qpEncodeingUTF8(name);
System.out.println(str);
//将字符串utf-8 quoted-printable 格式 转换成正常格式
str = vt.qpDecodingUTF8(str);
System.out.println(str);
String path ="d:\\aa.png";
//将图片转换成base64格式字符
//str = vt.BASE64Encodeing(path);
//将base64格式字符转换成图片
//vt.BASE64Decoding(str,"png", path);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 编码 图片 转换为 BASE64
* @param path 图片路径
* @return 转换后的字符串
* @throws Exception
*/
public String BASE64Encodeing(String path) throws Exception {
BASE64Encoder encoder = new BASE64Encoder();
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[(int) file.length()];
fis.read(buffer);
return encoder.encode(buffer);
}
/**
* 解码 BASE64 保存为图片
* @param str 需要解码的字符串
* @param imgType 解码图片类型
* @param path 解码后图片保存的位置
* @return 解码是否完成
* @throws Exception
*/
public boolean BASE64Decoding(String str, String imgType, String path) throws Exception {
BASE64Decoder decoder = new BASE64Decoder();
byte[] ib = decoder.decodeBuffer(str);
BufferedImage bi = ImageIO.read(new ByteArrayInputStream(ib));
boolean isFinish = ImageIO.write(bi, imgType, new File(path));
bi.flush();
return isFinish;
}
/**
* 编码 UTF8 quoted-printable
* @param str 需要编码的字符串
* @return 编码后的字符串
* @throws Exception
*/
public String qpEncodeingUTF8(String str) throws Exception {
if (str != null) {
char[] encode = str.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < encode.length; i++) {
if ((encode[i] >= '!') && (encode[i] <= '~')
&& (encode[i] != '=') && (encode[i] != '\n')) {
sb.append(encode[i]);
} else if (encode[i] == '=') {
sb.append("=3D");
} else if (encode[i] == '\n') {
sb.append("\n");
} else {
StringBuffer sbother = new StringBuffer();
sbother.append(encode[i]);
String ss = sbother.toString();
byte[] buf = null;
buf = ss.getBytes("utf-8");
// UTF-8: buf.length == 3
// GBK: buf.length == 2
if (buf.length == 3) {
for (int j = 0; j < buf.length; j++) {
String s16 = String.valueOf(Integer
.toHexString(buf[j]));
char c16_6;
char c16_7;
if (s16.charAt(6) >= 97 && s16.charAt(6) <= 122) {
c16_6 = (char) (s16.charAt(6) - 32);
} else {
c16_6 = s16.charAt(6);
}
if (s16.charAt(7) >= 97 && s16.charAt(7) <= 122) {
c16_7 = (char) (s16.charAt(7) - 32);
} else {
c16_7 = s16.charAt(7);
}
sb.append("=" + c16_6 + c16_7);
}
}
}
}
str = sb.toString();
}
return str;
}
/**
* 解码 UTF8 quoted-printable
* @param str 需要解码的字符串
* @return 解码后的字符串
* @throws Exception
*/
public String qpDecodingUTF8(String str) throws Exception {
if (str != null) {
StringBuffer sb = new StringBuffer(str);
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '\n' && sb.charAt(i - 1) == '=') {
sb.deleteCharAt(i - 1);
}
}
str = sb.toString();
byte[] bytes = str.getBytes("US-ASCII");
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
if (b != 95) {
bytes[i] = b;
} else {
bytes[i] = 32;
}
}
if (bytes != null) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
for (int i = 0; i < bytes.length; i++) {
int b = bytes[i];
if (b == '=') {
try {
int u = Character.digit((char) bytes[++i], 16);
int l = Character.digit((char) bytes[++i], 16);
if (u == -1 || l == -1) {
continue;
}
buffer.write((char) ((u << 4) + l));
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
} else {
buffer.write(b);
}
}
str = new String(buffer.toByteArray(), "UTF-8");
}
}
return str;
}
}
分享到:
相关推荐
java解析vcf的代码
thaplv :用于单倍体/单倍型VCF的工具用于单倍体/单倍型VCF的工具( thaplv )是用于分析以VCF格式存储的单倍型(或单倍体)数据的软件包(请参阅有关基因组学格式规范的更多信息。此工具包的主要目的包括一套高效且...
注意:由于基于Java的VCF解析器,目前该项目需要JRuby 9.0(或更高版本)。 我们希望最终替代纯Ruby 。特征为VCF和BCF文件实现RDF.rb阅读器,还支持bgzipped文件。 包括一个称为vcf2rdf的CLI工具,用于将VCF文件...
Java查看源码zip包RTG工具 版权所有 (c) 2018 Real Time Genomics Ltd 该软件是在简化的 BSD 许可下提供的。 看 介绍 RTG 工具是其中的一个子集,其中包括一些用于处理 VCF 文件和序列数据的有用实用程序。 可能最...
ch.eitchnet.converter.nokiaandroid 简单的应用程序可以解析诺基亚PC-Suite的消息和联系人导出。 邮件被格式化为XML文件,然后可以通过SMS备份和还原应用程序导入,而联系人被格式化为VCF文件。
VCF,以及作为以列格式存储的数据。 在单个节点上,ADAM 为优化的多线程工具提供具有竞争力的性能,同时支持横向扩展到具有超过一千个内核的集群。 ADAM 的 API 可用于 Scala、Java、Python、R 和 SQL。 为什么是...
java生成和创建联系人,解析联系人数据保存到数据库。如VCF等
Quince可以从VCF文件或使用生成的GA4GH Avro格式的文件中加载变体数据。 您可以将自己的VCF数据加载到HDFS上的datasets / variants_vcf目录中,也可以使用此存储库中提供的测试数据,如下所示: hadoop fs -mkdir ...
VarDict实现了一些新颖的功能,例如从靶向测序实验中扩增子偏倚感知变体调用,通过重新排列bwa软限读序列来挽救长indel插入,以及比许多基于Java的变体调用器更好的可伸缩性。 由于VarDict称之为“一切”的理念,...
一个用于大规模基因组分析的开源工具包 ·· Glow是一个开放源代码工具包,用于在生物银行...灵活的Glow可以使用通用文件格式(例如VCF,BGEN和Plink)以及高性能大数据标准的数据集。 您可以使用Python,SQL,R,Java
筛选VCF,使用snpEff注释变体,生成MK表以进行下游分析,运行MK测试,SnIPRE并计算各种统计信息的管道。 作者: 萨拉·维奇克(Sara Wuitchik)(波士顿大学和哈佛大学博士后研究员; ) 艾莉森·舒尔茨(Allison...
Java,R,Python和Bash脚本来处理NGS数据和其他生物数据 还检查了其他物种基因组学的脚本( 在线教程)( )! 过滤脚本 ldPruning.sh Bash脚本可从vcf文件中以高度链接不平衡状态修剪SNP。 这对于所有假设SNP之间...
这样,服务器将启动,浏览器将为您请求的文件打开igv.js查看器,类似于您对IGV的Java版本的处理方式。 如果没有--open-browser选项,则可以转到http:// $ server:5001 / (其中$server通常是localhost )。 安装 ...
我们修改了IGV,以显示来自BaseSpace的对齐和变体数据(BAM和VCF文件)。 这样,您可以在BaseSpace中启动“重测序”或“扩增子”工作流后执行变体分析。 IGV保留其所有本机功能,包括从本地计算机加载数据。 IGV中...