⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remoteinputstreamimpl.java

📁 编了一个简单的聊天器
💻 JAVA
字号:
/*
 * This file is a part of the RMI Plugin for Eclipse tutorials.
 * Copyright (C) 2002-7 Genady Beryozkin
 * 
 * You are free to modify this file, as long as you leave
 * the following copyright:
 * 
 * This file is based on the Remote File System example of
 * the RMI Plug-in for Eclipse. The original code is 
 * Copyright (C) 2002-7 Genady Beryozkin
 */
package demo.rmi.filesystem.server;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import demo.rmi.filesystem.common.IRemoteFile;
import demo.rmi.filesystem.common.IRemoteInputStream;

/**
 * Implementation of a remote input stream. It is created by the server
 * using a local file as an argument. 
 * This class extends {@link FileInputStream} only as a convenience,
 * we could extend {@link UnicastRemoteObject} and hold a reference to
 * the {@link FileInputStream} in a field. Since {@link RemoteException} is
 * a subclass of {@link IOException} the method declarations are compatible
 * with their "super" implementations. However, all methods must catch the
 * {@link IOException} returned by the super implementation and wrap it with
 * a {@link RemoteException}.
 * 
 * @see IRemoteFile#getInputStream()
 * @author Genady Beryozkin, rmi-info@genady.net
 */
public class RemoteInputStreamImpl extends FileInputStream implements IRemoteInputStream {

	/**
	 * Create a new RemoteInputStream that reads from a local (server) file.
	 * @see IRemoteFile#getInputStream()
	 */
	public RemoteInputStreamImpl(File file) throws RemoteException, FileNotFoundException {
		super(file);
		UnicastRemoteObject.exportObject(this);
	}

	/* (non-Javadoc)
	 * @see java.io.FileInputStream#read()
	 */
	@Override
	public int read() throws RemoteException {
		try {
			return super.read();
		} catch (IOException e) {
			throw new RemoteException("RemoteInputStreamImpl", e);
		}
	}

	/* (non-Javadoc)
	 * @see demo.rmi.filesystem.common.IRemoteInputStream#read(int)
	 */
	public byte[] read(int count) throws RemoteException {
		try {
			byte[] buf = new byte[count];
			int realCount = super.read(buf);
			if (realCount == -1) {
				return null;
			}
			if (realCount < count) {
				byte[] copy = new byte[realCount];
				System.arraycopy(buf, 0, copy, 0, realCount);
				return copy;
			} else {
				return buf;
			}
		} catch (IOException e) {
			throw new RemoteException("RemoteInputStreamImpl", e);
		}
	}
	
	/* (non-Javadoc)
	 * @see java.io.FileInputStream#available()
	 */
	@Override
	public int available() throws RemoteException {
		try {
			return super.available();
		} catch (IOException e) {
			throw new RemoteException("RemoteInputStreamImpl", e);
		}
	}
	
	/* (non-Javadoc)
	 * @see java.io.InputStream#mark(int)
	 */
	@Override
	public synchronized void mark(int readlimit) {
		super.mark(readlimit);
	}
	
	/* (non-Javadoc)
	 * @see java.io.FileInputStream#close()
	 */
	@Override
	public void close() throws RemoteException {
		try {
			super.close();
		} catch (IOException e) {
			throw new RemoteException("RemoteInputStreamImpl", e);
		}
	}
	
	/* (non-Javadoc)
	 * @see java.io.InputStream#markSupported()
	 */
	@Override
	public boolean markSupported() {
		return super.markSupported();
	}
	
	/* (non-Javadoc)
	 * @see java.io.InputStream#reset()
	 */
	@Override
	public synchronized void reset() throws RemoteException {
		try {
			super.reset();
		} catch (IOException e) {
			throw new RemoteException("RemoteInputStreamImpl", e);
		}
	}
	
	/* (non-Javadoc)
	 * @see java.io.FileInputStream#skip(long)
	 */
	@Override
	public long skip(long n) throws RemoteException {
		try {
			return super.skip(n);
		} catch (IOException e) {
			throw new RemoteException("RemoteInputStreamImpl", e);
		}
	}
}

⌨️ 快捷键说明

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