protocolnative.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 513 行

JAVA
513
字号
/* * @(#)ProtocolNative.java	1.8 06/10/10 * * Copyright  1990-2008 Sun Microsystems, Inc. All Rights Reserved.   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER   *    * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License version   * 2 only, as published by the Free Software Foundation.    *    * This program is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   * General Public License version 2 for more details (a copy is   * included at /legal/license.txt).    *    * You should have received a copy of the GNU General Public License   * version 2 along with this work; if not, write to the Free Software   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA   * 02110-1301 USA    *    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa   * Clara, CA 95054 or visit www.sun.com if you need additional   * information or have any questions.  * *//* * NOTE - This code is written a somewhat unusual, and not very object oriented, way. * The principal reason for this is that we intend to translate much of this * protocol into C and place it in the KVM kernel where is will be much smaller * and faster. */package com.sun.cdc.io.j2me.file;import java.io.*;import javax.microedition.io.*;/** * This implements the default "file:" protocol J2ME * <p> * This class represents the native functions that will be written in C for KVM. * For now this Java version is used instead. * * @version 2.0 2/21/2000 */public abstract class ProtocolNative extends ProtocolBase {    /* Read mode */    public boolean reading;    /* Write mode */    public boolean writing;    /* Append mode */    boolean append = false;    /* Need to open flag */    boolean needToOpen = true;    /*     * open0     *     * @param name the target of the connection     * @param parms the target parameters     * @param mode the access mode     */    public Connection open0(String name, String parms, int mode) throws IOException {//System.out.println("open0 |"+name+"| parms |"+parms+"|");        if(name.length() >= 2 && name.charAt(0) == '/' && name.charAt(1) == '/') {            if(name.length() >= 3) {                if(name.charAt(2) != '/') {                    throw new IllegalArgumentException("Network format not implemented "+name);                } else {                    name = name.substring(2);                }            } else {                throw new IllegalArgumentException("Invalid file name "+name);            }        }        reading = (mode&Connector.READ) != 0;        writing = (mode&Connector.WRITE) != 0;        if(parms.length() > 0) {            if(parms.equals("append=true")) {                append = true;            } else {                throw new IllegalArgumentException("Unknown parameters "+parms);            }        }        if(append && reading) {            throw new IllegalArgumentException("Cannot open file for reading and appending");        }        return prim_openProtocol(name, parms, mode);    }    /*     * close0     */    public void close0() throws IOException {        prim_closeProtocol();    }    /*     * ensurePrimOpen     */    void ensurePrimOpen() throws IOException {        testSelection();        if(needToOpen) {            if(!prim_isDirectory()) {                reallyOpen();            }            needToOpen = false;        }    }    /*     * reallyOpen     */    void reallyOpen()  throws IOException {        boolean exists  = prim_exists();        if(append) {            if(reading) {                throw new RuntimeException("Internal error - prim_open() append && reading");            }            if(!writing) {                throw new RuntimeException("Internal error - prim_open() append && !writing");            }            /* Must be writing */            prim_realOpen();            prim_seek(prim_lengthOf());            return;        }        if(reading && !writing) {            if(!exists) {                throw new RuntimeException("Internal error - prim_open() reading && !exists");            }            prim_realOpen();            return;        }        if(writing && !reading) {            if(exists) {                prim_deleteItem();            }            prim_realOpen();            return;        }        if(reading && writing) {            prim_realOpen();            return;        }        throw new RuntimeException("Internal error - prim_open() !writing && !reading");    }    /*     * clearSelection     */    public void clearSelection() throws IOException {        needToOpen = true;        prim_clearSelection();    }    /*     * getAvailableSpace0     */    public long getAvailableSpace0() throws IOException {        return prim_availableSpace();    }    /*     * getItemCount0     */    public int getItemCount0() throws IOException {        return prim_countItems();    }    /*     * selectFirstItem0     */    public boolean selectFirstItem0() throws IOException {        clearSelection();        prim_findFirstItemAndSelect();        return isSelected0();    }    /*     * selectNextItem0     */    public boolean selectNextItem0() throws IOException {        // can't use clearSelection() here        boolean res = false;        try {            prim_findItemAfterSelectionAndSelect();            res = isSelected0();        } finally {            clearSelection();        }        return res;    }    /*     * selectItem0     */    public boolean selectItem0(String name) throws IOException {        clearSelection();        prim_findItemAndSelect(name);        return isSelected0();    }    /*     * selectItemByInt0     */    public boolean selectItemByInt0(int i) throws IOException {        clearSelection();        prim_findItemAndSelectByInt(i);        return isSelected0();    }    /*     * deselectItem0     */    public void deselectItem0() throws IOException {        clearSelection();    }    /*     * isSelected0     */    public boolean isSelected0() throws IOException {        return prim_isSelected();    }    /*     * create0     */    public void create0() throws IOException {        clearSelection();        prim_createAndSelect();        if(!isSelected0()) {            throw new IOException("Internal error - exception not thrown");        }    }    /*     * createName0     */    public void createName0(String name) throws IOException {        clearSelection();        prim_createFileAndSelect(name);        if(!isSelected0()) {            throw new IOException("Internal error - exception not thrown");        }    }    /*     * createName0     */    public void createNameByInt0(int i) throws IOException {        clearSelection();        prim_createFileAndSelectByInt(i);        if(!isSelected0()) {            throw new IOException("Internal error - exception not thrown");        }    }    /*     * createDirectory0     */    public void createDirectory0(String name) throws IOException {        clearSelection();        prim_createDirectoryAndSelect(name);        if(!isSelected0()) {            throw new IOException("Internal error - exception not thrown");        }    }    /*     * testSelection     */    void testSelection() throws IOException {        if(!isSelected0()) {            throw new IOException("Internal error - nothing selected");        }    }    /*     * delete0     */    public void delete0() throws IOException {        testSelection();        prim_deleteItem();    }    /*     * rename0     */    public void rename0(String name2) throws IOException {        testSelection();        prim_renameFile(name2);    }    /*     * renameByInt0     */    public void renameByInt0(int i) throws IOException {        testSelection();        prim_renameFileByInt(i);    }    /*     * renameDirectory0     */    public void renameDirectory0(String name2) throws IOException {        testSelection();        prim_renameDirectory(name2);    }    /*     * getLength0     */    public long getLength0() throws IOException {        testSelection();        return prim_lengthOf();    }    /*     * setLength0     */    public void setLength0(long len) throws IOException {        testSelection();        prim_setLength(len);    }    /*     * getModificationDate0     */    public long getModificationDate0() throws IOException {        testSelection();        return prim_timeOf();    }    /*     * getItemName0     */    public String getItemName0() throws IOException {        testSelection();        return prim_getSelectionName();    }    /*     * getItemNumber0     */    public int getItemNumber0() throws IOException {        testSelection();        return prim_getSelectionNumber();    }    /*     * isDirectory0     */    public boolean isDirectory0() throws IOException {        testSelection();        return prim_isDirectory();    }    /*     * canRead0     */    public boolean canRead0() throws IOException {        testSelection();        return prim_canRead();    }    /*     * canWrite0     */    public boolean canWrite0() throws IOException {        testSelection();        return prim_canWrite();    }    /*     * setReadable0     */    public void setReadable0(boolean tf) throws IOException {        testSelection();        if(!prim_setReadable(tf)) {            throw new SecurityException();        }    }    /*     * setWritable0     */    public void setWritable0(boolean tf) throws IOException {        testSelection();        if(!prim_setWritable(tf)) {            throw new SecurityException();        }    }    /*     * available0     */    public int available0() throws IOException {        ensurePrimOpen();        return (int)(getLength0() - getPosition0());    }    /*     * seek0     */    public void seek0(long pos) throws IOException {        ensurePrimOpen();        prim_seek(pos);    }    /*     * getPosition0     */    public long getPosition0() throws IOException {        ensurePrimOpen();        return prim_getPosition();    }    /*     * read0     */    public int read0() throws IOException {        ensurePrimOpen();        return prim_read();    }    /*     * readBytes0     */    public int readBytes0(byte b[], int off, int len) throws IOException {        ensurePrimOpen();        return prim_readBytes(b, off, len);    }    /*     * write0     */    public void write0(int b) throws IOException {        ensurePrimOpen();        prim_write(b);    }    /*     * writeBytes0     */    public void writeBytes0(byte b[], int off, int len) throws IOException {        ensurePrimOpen();        prim_writeBytes(b, off, len);    }    /*     * Real primitive methods     */    abstract public Connection prim_openProtocol(String name, String parms, int mode) throws IOException;    abstract public void    prim_closeProtocol() throws IOException;    abstract public void    prim_realOpen() throws IOException;    abstract public void    prim_clearSelection() throws IOException;    abstract public String  prim_getSelectionName() throws IOException;    abstract public int     prim_getSelectionNumber() throws IOException;    abstract public boolean prim_isSelected() throws IOException;    abstract public void    prim_findFirstItemAndSelect() throws IOException;    abstract public void    prim_findItemAndSelect(String name) throws IOException;    abstract public void    prim_findItemAndSelectByInt(int i) throws IOException;    abstract public void    prim_findItemAfterSelectionAndSelect() throws IOException;    abstract public long    prim_availableSpace() throws IOException;    abstract public int     prim_countItems() throws IOException;    abstract public void    prim_createAndSelect() throws IOException;    abstract public void    prim_createFileAndSelect(String name) throws IOException;    abstract public void    prim_createFileAndSelectByInt(int i) throws IOException;    abstract public void    prim_createDirectoryAndSelect(String name) throws IOException;    abstract public boolean prim_deleteItem() throws IOException;    abstract public boolean prim_renameFile(String name2) throws IOException;    abstract public boolean prim_renameFileByInt(int i) throws IOException;    abstract public boolean prim_renameDirectory(String name2) throws IOException;    abstract public long    prim_lengthOf() throws IOException;    abstract public void    prim_setLength(long len) throws IOException;    abstract public long    prim_timeOf() throws IOException;    abstract public boolean prim_exists() throws IOException;    abstract public boolean prim_isDirectory() throws IOException;    abstract public boolean prim_canRead() throws IOException;    abstract public boolean prim_canWrite() throws IOException;    abstract public boolean prim_setReadable(boolean tf) throws IOException;    abstract public boolean prim_setWritable(boolean tf) throws IOException;    abstract public void    prim_seek(long pos) throws IOException;    abstract public long    prim_getPosition() throws IOException;    abstract public int     prim_read() throws IOException;    abstract public int     prim_readBytes(byte b[], int off, int len) throws IOException;    abstract public void    prim_write(int b) throws IOException;    abstract public void    prim_writeBytes(byte b[], int off, int len) throws IOException;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?