亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? transfer.java

?? 非常棒的java數據庫
?? JAVA
字號:
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.value;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.math.BigDecimal;
import java.net.Socket;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;

import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.engine.Constants;
import org.h2.engine.SessionInterface;
import org.h2.message.Message;
import org.h2.message.TraceSystem;
import org.h2.tools.SimpleResultSet;
import org.h2.util.ExactUTF8InputStreamReader;
import org.h2.util.IOUtils;
import org.h2.util.StringCache;

/**
 * The transfer class is used to send and receive Value objects.
 * It is used on both the client side, and on the server side.
 */
public class Transfer {

    private static final int BUFFER_SIZE = 16 * 1024;
    private static final int LOB_MAGIC = 0x1234;

    private SessionInterface session;
    protected Socket socket;
    protected DataInputStream in;
    protected DataOutputStream out;

    public Transfer(SessionInterface session) {
        this.session = session;
    }

    public void setSocket(Socket s) {
        socket = s;
    }

    public void init() throws IOException {
        in = new DataInputStream(new BufferedInputStream(socket.getInputStream(), Transfer.BUFFER_SIZE));
        out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), Transfer.BUFFER_SIZE));
    }

    public void flush() throws IOException {
        out.flush();
    }

    public Transfer writeBoolean(boolean x) throws IOException {
        out.writeByte((byte) (x ? 1 : 0));
        return this;
    }

    public boolean readBoolean() throws IOException {
        return in.readByte() == 1;
    }

    public Transfer writeByte(byte x) throws IOException {
        out.writeByte(x);
        return this;
    }

    public byte readByte() throws IOException {
        return in.readByte();
    }

    public Transfer writeInt(int i) throws IOException {
        out.writeInt(i);
        return this;
    }

    public int readInt() throws IOException {
        return in.readInt();
    }

    public Transfer writeLong(long i) throws IOException {
        out.writeLong(i);
        return this;
    }

    public long readLong() throws IOException {
        return in.readLong();
    }

    public Transfer writeDouble(double i) throws IOException {
        out.writeDouble(i);
        return this;
    }

    public Transfer writeFloat(float i) throws IOException {
        out.writeFloat(i);
        return this;
    }

    public double readDouble() throws IOException {
        return in.readDouble();
    }

    public float readFloat() throws IOException {
        return in.readFloat();
    }

    public Transfer writeString(String s) throws IOException {
        if (s == null) {
            out.writeInt(-1);
        } else {
            int len = s.length();
            out.writeInt(len);
            for (int i = 0; i < len; i++) {
                out.writeChar(s.charAt(i));
            }
        }
        return this;
    }

    public String readString() throws IOException {
        int len = in.readInt();
        if (len == -1) {
            return null;
        }
        // TODO optimize: StringBuffer is synchronized, maybe use a char array 
        // (but that means more memory)
        StringBuffer buff = new StringBuffer(len);
        for (int i = 0; i < len; i++) {
            buff.append(in.readChar());
        }
        String s = buff.toString();
        s = StringCache.get(s);
        return s;
    }

    public Transfer writeBytes(byte[] data) throws IOException {
        if (data == null) {
            writeInt(-1);
        } else {
            writeInt(data.length);
            out.write(data);
        }
        return this;
    }

    public byte[] readBytes() throws IOException {
        int len = readInt();
        if (len == -1) {
            return null;
        }
        byte[] b = new byte[len];
        in.readFully(b);
        return b;
    }

    public void close() {
        if (socket != null) {
            try {
                out.flush();
                if (socket != null) {
                    socket.close();
                }
            } catch (IOException e) {
                TraceSystem.traceThrowable(e);
            } finally {
                socket = null;
            }
        }
    }

    public void writeValue(Value v) throws IOException, SQLException {
        int type = v.getType();
        writeInt(type);
        switch (type) {
        case Value.NULL:
            break;
        case Value.BYTES:
        case Value.JAVA_OBJECT:
            writeBytes(v.getBytesNoCopy());
            break;
        case Value.UUID: {
            ValueUuid uuid = (ValueUuid) v;
            writeLong(uuid.getHigh());
            writeLong(uuid.getLow());
            break;
        }
        case Value.BOOLEAN:
            writeBoolean(v.getBoolean().booleanValue());
            break;
        case Value.BYTE:
            writeByte(v.getByte());
            break;
        case Value.TIME:
            writeLong(v.getTimeNoCopy().getTime());
            break;
        case Value.DATE:
            writeLong(v.getDateNoCopy().getTime());
            break;
        case Value.TIMESTAMP: {
            Timestamp ts = v.getTimestampNoCopy();
            writeLong(ts.getTime());
            writeInt(ts.getNanos());
            break;
        }
        case Value.DECIMAL:
            writeString(v.getString());
            break;
        case Value.DOUBLE:
            writeDouble(v.getDouble());
            break;
        case Value.FLOAT:
            writeFloat(v.getFloat());
            break;
        case Value.INT:
            writeInt(v.getInt());
            break;
        case Value.LONG:
            writeLong(v.getLong());
            break;
        case Value.SHORT:
            writeInt(v.getShort());
            break;
        case Value.STRING:
        case Value.STRING_IGNORECASE:
        case Value.STRING_FIXED:
            writeString(v.getString());
            break;
        case Value.BLOB: {
            long length = v.getPrecision();
            if (SysProperties.CHECK && length < 0) {
                throw Message.getInternalError("length: " + length);
            }
            writeLong(length);
            InputStream in = v.getInputStream();
            long written = IOUtils.copyAndCloseInput(in, out);
            if (SysProperties.CHECK && written != length) {
                throw Message.getInternalError("length:" + length + " written:" + written);
            }
            writeInt(LOB_MAGIC);
            break;
        }
        case Value.CLOB: {
            long length = v.getPrecision();
            if (SysProperties.CHECK && length < 0) {
                throw Message.getInternalError("length: " + length);
            }
            writeLong(length);
            Reader reader = v.getReader();
            // below, writer.flush needs to be called to ensure the buffer is written
            // but, this will also flush the output stream, and this slows things down
            // so construct an output stream that will ignore this chained flush call
            java.io.OutputStream out2 = new java.io.FilterOutputStream(out) {
                public void flush() {
                }
            };
            Writer writer = new BufferedWriter(new OutputStreamWriter(out2, Constants.UTF8));
            long written = IOUtils.copyAndCloseInput(reader, writer);
            if (SysProperties.CHECK && written != length) {
                throw Message.getInternalError("length:" + length + " written:" + written);
            }
            writer.flush();
            writeInt(LOB_MAGIC);
            break;
        }
        case Value.ARRAY: {
            Value[] list = ((ValueArray) v).getList();
            writeInt(list.length);
            for (int i = 0; i < list.length; i++) {
                writeValue(list[i]);
            }
            break;
        }
        case Value.RESULT_SET: {
            ResultSet rs = ((ValueResultSet) v).getResultSet();
            rs.beforeFirst();
            ResultSetMetaData meta = rs.getMetaData();
            int columnCount = meta.getColumnCount();
            writeInt(columnCount);
            for (int i = 0; i < columnCount; i++) {
                writeString(meta.getColumnName(i + 1));
                writeInt(meta.getColumnType(i + 1));
                writeInt(meta.getPrecision(i + 1));
                writeInt(meta.getScale(i + 1));
            }
            while (rs.next()) {
                writeBoolean(true);
                for (int i = 0; i < columnCount; i++) {
                    int t = DataType.convertSQLTypeToValueType(meta.getColumnType(i + 1));
                    Value val = DataType.readValue(session, rs, i + 1, t);
                    writeValue(val);
                }
            }
            writeBoolean(false);
            rs.beforeFirst();
            break;
        }
        default:
            throw Message.getInternalError("type=" + type);
        }
    }

    public Value readValue() throws IOException, SQLException {
        int type = readInt();
        switch(type) {
        case Value.NULL:
            return ValueNull.INSTANCE;
        case Value.BYTES:
            return ValueBytes.getNoCopy(readBytes());
        case Value.UUID:
            return ValueUuid.get(readLong(), readLong());
        case Value.JAVA_OBJECT:
            return ValueJavaObject.getNoCopy(readBytes());
        case Value.BOOLEAN:
            return ValueBoolean.get(readBoolean());
        case Value.BYTE:
            return ValueByte.get(readByte());
        case Value.DATE:
            return ValueDate.getNoCopy(new Date(readLong()));
        case Value.TIME:
            return ValueTime.getNoCopy(new Time(readLong()));
        case Value.TIMESTAMP: {
            Timestamp ts = new Timestamp(readLong());
            ts.setNanos(readInt());
            return ValueTimestamp.getNoCopy(ts);
        }
        case Value.DECIMAL:
            return ValueDecimal.get(new BigDecimal(readString()));
        case Value.DOUBLE:
            return ValueDouble.get(readDouble());
        case Value.FLOAT:
            return ValueFloat.get(readFloat());
        case Value.INT:
            return ValueInt.get(readInt());
        case Value.LONG:
            return ValueLong.get(readLong());
        case Value.SHORT:
            return ValueShort.get((short) readInt());
        case Value.STRING:
            return ValueString.get(readString());
        case Value.STRING_IGNORECASE:
            return ValueStringIgnoreCase.get(readString());
        case Value.STRING_FIXED:
            return ValueStringFixed.get(readString());
        case Value.BLOB: {
            long length = readLong();
            ValueLob v = ValueLob.createBlob(in, length, session.getDataHandler());
            if (readInt() != LOB_MAGIC) {
                throw Message.getSQLException(ErrorCode.CONNECTION_BROKEN);
            }
            return v;
        }
        case Value.CLOB: {
            long length = readLong();
            ValueLob v = ValueLob.createClob(new ExactUTF8InputStreamReader(in), length, session.getDataHandler());
            if (readInt() != LOB_MAGIC) {
                throw Message.getSQLException(ErrorCode.CONNECTION_BROKEN);
            }
            return v;
        }
        case Value.ARRAY: {
            int len = readInt();
            Value[] list = new Value[len];
            for (int i = 0; i < len; i++) {
                list[i] = readValue();
            }
            return ValueArray.get(list);
        }
        case Value.RESULT_SET: {
            SimpleResultSet rs = new SimpleResultSet();
            int columns = readInt();
            for (int i = 0; i < columns; i++) {
                rs.addColumn(readString(), readInt(), readInt(), readInt());
            }
            while (true) {
                if (!readBoolean()) {
                    break;
                }
                Object[] o = new Object[columns];
                for (int i = 0; i < columns; i++) {
                    o[i] = readValue().getObject();
                }
                rs.addRow(o);
            }
            return ValueResultSet.get(rs);
        }
        default:
            throw Message.getInternalError("type="+type);
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public void setSession(SessionInterface session) {
        this.session = session;
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
捆绑紧缚一区二区三区视频| 狠狠狠色丁香婷婷综合激情| 精品欧美乱码久久久久久1区2区| 成人av在线观| 免费人成精品欧美精品| 亚洲精品免费视频| 国产色一区二区| 日韩精品在线网站| 欧美色爱综合网| caoporn国产精品| 国产在线日韩欧美| 青青草国产成人av片免费 | 中文一区二区在线观看| 91精品国产入口在线| 91美女在线视频| 成人黄页在线观看| 国产麻豆91精品| 另类欧美日韩国产在线| 丝袜亚洲另类欧美综合| 亚洲乱码一区二区三区在线观看| 中文字幕精品一区二区精品绿巨人 | 日韩欧美国产不卡| 欧美怡红院视频| 色婷婷精品久久二区二区蜜臀av | 91国偷自产一区二区三区成为亚洲经典 | 国产精品电影一区二区三区| 精品久久国产老人久久综合| 日韩亚洲欧美一区| 欧美另类一区二区三区| 日本道色综合久久| 一本大道久久a久久综合婷婷| 成人激情免费视频| 粉嫩av一区二区三区粉嫩| 国产美女娇喘av呻吟久久| 久久精品国产成人一区二区三区| 青青草国产精品亚洲专区无| 日本女人一区二区三区| 男男成人高潮片免费网站| 三级一区在线视频先锋| 日本91福利区| 久久精品av麻豆的观看方式| 久久99久久99精品免视看婷婷| 日本不卡视频在线| 老司机一区二区| 韩国三级中文字幕hd久久精品| 久久99在线观看| 国产精品资源网| 粉嫩一区二区三区在线看| av在线不卡免费看| 色呦呦一区二区三区| 欧美三级韩国三级日本三斤| 欧美亚洲日本国产| 7777精品伊人久久久大香线蕉完整版 | 91麻豆免费看| 欧美三区在线观看| 日韩一区二区高清| 偷拍与自拍一区| 日韩精品1区2区3区| 久久精品噜噜噜成人88aⅴ| 国产资源在线一区| 成人三级伦理片| 在线精品国精品国产尤物884a| 欧美电影影音先锋| 久久女同性恋中文字幕| 成人欧美一区二区三区1314| 亚洲国产综合色| 国产在线观看一区二区| 99热这里都是精品| 欧美久久久久久久久| 久久亚洲春色中文字幕久久久| 国产精品久久看| 五月天婷婷综合| 国产精品18久久久久| 91成人免费在线| 精品日韩在线观看| 亚洲三级视频在线观看| 美腿丝袜在线亚洲一区 | 成人免费电影视频| 欧美日韩一区二区欧美激情 | 一级中文字幕一区二区| 免费日本视频一区| 99麻豆久久久国产精品免费 | 91精品国产综合久久婷婷香蕉| 精品88久久久久88久久久| 国产精品久久看| 一本到高清视频免费精品| 日韩视频免费直播| 自拍偷自拍亚洲精品播放| 免费高清在线一区| 一本久久a久久精品亚洲| 精品国产一区二区精华| 一区二区三区精品在线| 国产乱子轮精品视频| 欧美三片在线视频观看| 国产精品久久久久久亚洲伦| 蜜桃视频在线观看一区二区| 色欲综合视频天天天| 久久久久久久久久久久久久久99| 亚洲一二三区在线观看| 成人黄色在线看| 26uuu精品一区二区在线观看| 亚洲午夜激情网站| 成人av网站免费观看| 精品国偷自产国产一区| 午夜久久久久久久久久一区二区| 成人av在线播放网址| 久久免费视频色| 日本aⅴ免费视频一区二区三区| 91麻豆精东视频| 国产精品久久久久一区二区三区 | 欧美日韩国产大片| 国产精品网站在线观看| 麻豆精品一区二区| 欧美区视频在线观看| 亚洲品质自拍视频| 成人永久aaa| 国产亚洲一本大道中文在线| 另类欧美日韩国产在线| 欧美日本一区二区三区四区| 亚洲免费在线电影| 97久久精品人人做人人爽50路| 国产日韩欧美a| 国产精品自拍三区| 久久久久免费观看| 国产在线看一区| 久久综合丝袜日本网| 麻豆国产一区二区| 日韩久久久久久| 毛片av一区二区三区| 欧美大胆一级视频| 精品一区二区在线观看| 精品免费一区二区三区| 久久99久久99| 26uuu久久综合| 国产成人免费在线视频| 欧美国产精品一区| 成人污视频在线观看| 中文字幕一区二区三区在线观看| 成人小视频免费在线观看| 中文字幕乱码日本亚洲一区二区| 大白屁股一区二区视频| 国产精品毛片大码女人| av中文字幕不卡| 一级日本不卡的影视| 欧美午夜精品电影| 日本大胆欧美人术艺术动态| 日韩欧美国产不卡| 国产成人av电影在线观看| 中文在线一区二区| 日本道在线观看一区二区| 亚洲国产你懂的| 日韩欧美高清在线| 国产精品99久久久| 中文字幕综合网| 欧美三级日韩在线| 久久精品国产成人一区二区三区| 久久精品综合网| 色综合久久中文综合久久97| 亚洲永久免费av| 日韩欧美激情一区| 福利电影一区二区三区| 亚洲男同1069视频| 91精品在线观看入口| 国产自产视频一区二区三区| 亚洲欧洲日韩在线| 宅男在线国产精品| 国产激情一区二区三区桃花岛亚洲| 亚洲婷婷国产精品电影人久久| 欧美日韩一级视频| 国产一区二区三区四区五区美女| 国产精品国产自产拍高清av| 欧美日韩亚洲另类| 国产精品一区二区免费不卡| 一区二区三区欧美亚洲| 日韩免费观看高清完整版在线观看| 成人小视频在线| 日韩精品视频网站| 国产精品免费视频网站| 欧美日韩精品一区二区| 国产不卡视频在线观看| 亚洲午夜羞羞片| 国产午夜精品理论片a级大结局| 欧美三级电影网站| 高清国产一区二区| 日本一不卡视频| 日韩伦理av电影| 精品国产乱码久久久久久久| 91福利在线导航| 国产精品一二三区在线| 亚洲va欧美va天堂v国产综合| 欧美国产1区2区| 日韩一区二区在线看| 日本道精品一区二区三区| 国产精品小仙女| 毛片基地黄久久久久久天堂| 亚洲主播在线观看| 国产精品进线69影院| 久久久午夜精品| 日韩欧美国产综合一区| 欧美视频一区二区三区|