package tctable; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; public class TCTable { public int id=0; //Идентификатор таблицы public String name=""; //Название таблицы public List fields=new ArrayList(); //Список полей private int nc=0; //Байтов под NULL значения private byte[] m_NULL=null; //NULL значения private InputStream m_file; /** * Конструктор * @param Строка name Название таблицы * @param Целое id Идентификатор таблицы (обычно уникальный) */ public TCTable(String name, int id) { this.name=name; this.id=id; } //Открыть таблицу по названию файла /*function OpenTableF(file) { if(file_exists(file)) { this.OpenTableH(fopen(file,'r')); } }*/ //Открыть таблицу из потока HANDLE public boolean OpenTableH(InputStream handle) throws IOException { this.m_file=handle; DataInputStream dis = new DataInputStream(handle); if(Tools.readUShort(dis)!=65500) return false; //id файла if(Tools.readUShort(dis)!=1) return false; //Версия файла this.id= Tools.readInt(dis); //ID таблицы или запроса (4 байта можно сделать 2) if(dis.readByte()!=0) return false; //Только плотные таблицы //Считываем название таблицы this.name = Tools.readUTF8_1(dis); //Считываем столбцы int count=dis.readUnsignedByte(); //Количество столбцов for(int i=0;i> 8); //File version: 2 bytes. os.write((1 & 0x000000ff)); os.write((1 & 0x0000ff00) >> 8); //Table ID (or Request ID): 4 bytes. os.write((this.id & 0x000000ff)); os.write((this.id & 0x0000ff00) >> 8); os.write((this.id & 0x00ff0000) >> 16); os.write((this.id & 0xff000000) >> 24); //Table type: 1 byte (0- "Dense" 1- "Loose") os.write(0); //UTF8_1 String byte[] ba = this.name.getBytes("UTF-8"); os.write(ba.length); os.write(ba); //Count of fields: 1 byte. os.write(this.fields.size()); //Write name and type id for(int i=0;i