cdev-1.7.2n
This commit is contained in:
@@ -0,0 +1,416 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
|
||||
// Continuous Electron Beam Accelerator Facility
|
||||
//
|
||||
// This software was developed under a United States Government license
|
||||
// described in the NOTICE file included as part of this distribution.
|
||||
//
|
||||
// Jefferson Lab HPC Group, 12000 Jefferson Ave., Newport News, VA 23606
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Description:
|
||||
// rsvcDataOutputStream that converts a rsvcData into byte stream
|
||||
//
|
||||
// Author:
|
||||
// Jie Chen
|
||||
// Jefferson Lab HPC Group
|
||||
//
|
||||
// Revision History:
|
||||
// $Log: rsvcDataOutputStream.java,v $
|
||||
// Revision 1.1.1.1 2000/05/23 15:12:50 pal
|
||||
// cdev_psi_1.7.2
|
||||
//
|
||||
// Revision 1.1 1999/10/18 17:12:41 chen
|
||||
// *** empty log message ***
|
||||
//
|
||||
//
|
||||
//
|
||||
import java.io.*;
|
||||
|
||||
public class rsvcDataOutputStream
|
||||
{
|
||||
// for 32 bit machine
|
||||
public static final int _RSVC_STREAM_BYTE_UNIT = 4;
|
||||
|
||||
/**
|
||||
* Return a long word (32 bit) aligned size from original size
|
||||
*/
|
||||
public static final int _RSVC_RNDUP (int x)
|
||||
{
|
||||
return ((x + _RSVC_STREAM_BYTE_UNIT - 1)/_RSVC_STREAM_BYTE_UNIT)
|
||||
* _RSVC_STREAM_BYTE_UNIT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a single byte
|
||||
*/
|
||||
public static int streamSize (byte c)
|
||||
{
|
||||
return rsvcDataOutputStream._RSVC_RNDUP ((int)1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a short
|
||||
*/
|
||||
public static int streamSize (short c)
|
||||
{
|
||||
return rsvcDataOutputStream._RSVC_RNDUP ((int)2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a int
|
||||
*/
|
||||
public static int streamSize (int c)
|
||||
{
|
||||
return rsvcDataOutputStream._RSVC_RNDUP ((int)4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a long
|
||||
*/
|
||||
public static int streamSize (long c)
|
||||
{
|
||||
return rsvcDataOutputStream._RSVC_RNDUP ((int)8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a float
|
||||
*/
|
||||
public static int streamSize (float c)
|
||||
{
|
||||
return rsvcDataOutputStream._RSVC_RNDUP ((int)4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a double
|
||||
*/
|
||||
public static int streamSize (double c)
|
||||
{
|
||||
return rsvcDataOutputStream._RSVC_RNDUP ((int)8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a string
|
||||
*/
|
||||
public static int streamSize (String c)
|
||||
{
|
||||
return rsvcDataOutputStream.streamSize ((int)4) +
|
||||
rsvcDataOutputStream._RSVC_RNDUP ((int)(c.length() + 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return size information for a fix buffer of string
|
||||
*/
|
||||
public static int streamSize (String str, int buflen)
|
||||
{
|
||||
return rsvcDataOutputStream.streamSize (buflen) +
|
||||
rsvcDataOutputStream._RSVC_RNDUP(buflen);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return size information for a double
|
||||
*/
|
||||
public static int streamSize (rsvcTimeStamp ts)
|
||||
{
|
||||
return 2*rsvcDataOutputStream._RSVC_RNDUP ((int)4);
|
||||
}
|
||||
|
||||
|
||||
// underlying data output stream
|
||||
private DataOutputStream out = null;
|
||||
|
||||
/**
|
||||
* Construct a data output stream
|
||||
*/
|
||||
public rsvcDataOutputStream (OutputStream stream)
|
||||
{
|
||||
try {
|
||||
out = new DataOutputStream (stream);
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return how many bytes have been written to this stream
|
||||
*/
|
||||
public final int size ()
|
||||
{
|
||||
return out.size ();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write a single byte char to stream
|
||||
*/
|
||||
public void write (char c) throws IOException
|
||||
{
|
||||
int tmp = (int)c;
|
||||
try {
|
||||
out.writeInt (tmp);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a value of short to stream
|
||||
*/
|
||||
public void write (short c) throws IOException
|
||||
{
|
||||
int tmp = (int)c;
|
||||
try {
|
||||
out.writeInt (tmp);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a value of int to stream
|
||||
*/
|
||||
public void write (int c) throws IOException
|
||||
{
|
||||
try {
|
||||
out.writeInt (c);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write a value of float to stream
|
||||
*/
|
||||
public void write (float c) throws IOException
|
||||
{
|
||||
try {
|
||||
out.writeFloat (c);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write a value of double to stream
|
||||
*/
|
||||
public void write (double c) throws IOException
|
||||
{
|
||||
try {
|
||||
out.writeDouble (c);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a value of long to stream
|
||||
*/
|
||||
public void write (long c) throws IOException
|
||||
{
|
||||
try {
|
||||
out.writeLong (c);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a string as series of byte using default encoding
|
||||
*/
|
||||
public void write (String str) throws IOException
|
||||
{
|
||||
byte []barray = str.getBytes();
|
||||
int len = barray.length + 1;
|
||||
int rlen = rsvcDataOutputStream._RSVC_RNDUP (len);
|
||||
|
||||
// first write out how many bytes that follow
|
||||
try {
|
||||
out.writeInt (rlen);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// write out string as bytes
|
||||
try {
|
||||
out.writeBytes (str);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// write out remainder as 0
|
||||
for (int i = 0; i < rlen - len + 1; i++) {
|
||||
try {
|
||||
out.writeByte (0);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write a string as series of byte using default encoding
|
||||
* to a maximum length len
|
||||
*/
|
||||
public void write (String str, int len) throws IOException
|
||||
{
|
||||
if (len % rsvcDataOutputStream._RSVC_STREAM_BYTE_UNIT != 0) {
|
||||
throw new IOException ("Fix buffer len is not long word aligned");
|
||||
}
|
||||
|
||||
byte []barray = str.getBytes();
|
||||
if (barray.length >= len) {
|
||||
// need last 0 for out string buffer
|
||||
throw new IOException ("Overflow fix buffer");
|
||||
}
|
||||
|
||||
// first write out how many bytes that follow
|
||||
try {
|
||||
out.writeInt (len);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// write out string as bytes
|
||||
try {
|
||||
out.writeBytes (str);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// write out remainder as 0
|
||||
for (int i = 0; i < len - barray.length; i++) {
|
||||
try {
|
||||
out.writeByte (0);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a series of byte
|
||||
*/
|
||||
public void write (byte[] c) throws Exception
|
||||
{
|
||||
if (c == null) throw new NullPointerException();
|
||||
|
||||
int len = c.length;
|
||||
int rlen = rsvcDataOutputStream._RSVC_RNDUP (len);
|
||||
|
||||
try {
|
||||
out.writeInt (rlen);
|
||||
}catch (IOException e){
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
out.write (c, 0, len);
|
||||
}catch (IOException e){
|
||||
throw e;
|
||||
}
|
||||
|
||||
for (int i = 0; i < rlen - len; i++) {
|
||||
try {
|
||||
out.writeByte (0);
|
||||
}catch (IOException e){
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out a time stamp to the stream
|
||||
*/
|
||||
public void write (rsvcTimeStamp ts) throws IOException
|
||||
{
|
||||
try {
|
||||
out.writeInt (ts.secPastEpoch);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
out.writeInt (ts.nsec);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write out Byte to the stream
|
||||
*/
|
||||
public void write (Byte c) throws IOException
|
||||
{
|
||||
try {
|
||||
write (c.byteValue());
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out Short to the stream
|
||||
*/
|
||||
public void write (Short c) throws IOException
|
||||
{
|
||||
try {
|
||||
write (c.shortValue());
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out Integer to the stream
|
||||
*/
|
||||
public void write (Integer c) throws IOException
|
||||
{
|
||||
try {
|
||||
write (c.intValue());
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out Float to the stream
|
||||
*/
|
||||
public void write (Float c) throws IOException
|
||||
{
|
||||
try {
|
||||
write (c.floatValue());
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out Double to the stream
|
||||
*/
|
||||
public void write (Double c) throws IOException
|
||||
{
|
||||
try {
|
||||
write (c.doubleValue());
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush data out calling underlying real data stream flush method
|
||||
*/
|
||||
public final void flush () throws IOException
|
||||
{
|
||||
try {
|
||||
out.flush ();
|
||||
}catch (IOException e) {
|
||||
throw new IOException (e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user