📄 tuple.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package database;import java.io.*;import java.util.ArrayList;/** * * @author outlaw */public class Tuple implements Serializable{ String[] values; public Tuple(String[] vals) { int len=vals.length; values=new String[len]; for(int i=0;i<len;i++) { values[i]=vals[i]; } } public Comparable getValue(int attribID,String type) { String value=values[attribID]; if(type.equals("int")) return Integer.parseInt(value); if(type.equals("float")) return Float.parseFloat(value); if(type.startsWith("char")) return value; return null; } public Tuple(byte[] data,String[] types) throws Exception { ByteArrayInputStream bais=new ByteArrayInputStream(data); DataInputStream dis=new DataInputStream(bais); int len=types.length; values=new String[len]; for(int i=0;i<len;i++) { if(types[i].equals("int")) { values[i]=String.valueOf(dis.readInt()); } if(types[i].equals("float")) { values[i]=String.valueOf(dis.readFloat()); } if(types[i].startsWith("char")) { int realLength=dis.read(); int maxLen=Integer.parseInt(types[i].substring(4)); char[] charData=new char[realLength]; for(int j=0;j<realLength;j++) { charData[j]=dis.readChar(); } values[i]=new String(charData); dis.skip((maxLen-realLength)*2); } } } public byte[] toBytes(String[] types) throws Exception { ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); //int count=0; for(int i=0;i<types.length;i++) { if(types[i].equals("int")) { dos.writeInt(Integer.parseInt(values[i])); //count+=4; } if(types[i].equals("float")) { dos.writeFloat(Float.parseFloat(values[i])); //count+=4; } if(types[i].startsWith("char")) { //这个写入的length在【1,255】之间,是字符的长度,而不是字节的长度 dos.writeByte(values[i].length()); dos.writeChars(values[i]); int leftLen=Integer.parseInt(types[i].substring(4))-values[i].length(); //写入多余的没用的bytes for(int j=0;j<leftLen*2;j++) dos.writeByte(0); //count+=Integer.parseInt(types[i].substring(4))*2+1; } } //System.out.println("Write out"+count+"bytes!"); //byte[] array=baos.toByteArray(); //System.out.println("Actually Write out"+array.length+"bytes!"); dos.close(); return baos.toByteArray(); } public String[] getValues() { return values; } @Override public String toString() { StringBuilder builder=new StringBuilder(); builder.append("["); for(int i=0;i<values.length-1;i++) { builder.append(values[i]+","); } builder.append(values[values.length-1]+"]"); return builder.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -