csharpdatamarshaloutputstreamimpl.cs

来自「SRI international 发布的OAA框架软件」· CS 代码 · 共 460 行

CS
460
字号
using System;
using System.Net.Sockets;

namespace jnb.com.sri.sedc.javanetbridge
{
	public class CSharpDataMarshalOutputStreamImpl : CSharpDataMarshalOutputStream
	{
		private Socket socket;
		private byte[] tmpArray = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
		private char[] tmpCharArray = new char[] { '0' };

		public CSharpDataMarshalOutputStreamImpl(Socket socket) 
		{
			this.socket = socket;
		}

		public void write(byte data)
		{
			tmpArray[0] = data;
			socket.Send(tmpArray, 0, 1, SocketFlags.None);
		}

		public void write(short data)
		{
			tmpArray[0] = (byte)((data >> 8) & 0xFF);
			tmpArray[1] = (byte)((data >> 0) & 0xFF);
			socket.Send(tmpArray, 0, 2, SocketFlags.None);
		}

		public void write(int data)
		{
			tmpArray[0] = (byte)((data >> 24) & 0xFF);
			tmpArray[1] = (byte)((data >> 16) & 0xFF);
			tmpArray[2] = (byte)((data >> 8) & 0xFF);
			tmpArray[3] = (byte)((data >> 0) & 0xFF);
			socket.Send(tmpArray, 0, 4, SocketFlags.None);
		}

		public void write(float data)
		{
			long asLong = BitConverter.DoubleToInt64Bits(data);
			write(asLong);
		}

		public void write(long data)
		{
			tmpArray[0] = (byte)((data >> 56) & 0xFF);
			tmpArray[1] = (byte)((data >> 48) & 0xFF);
			tmpArray[2] = (byte)((data >> 40) & 0xFF);
			tmpArray[3] = (byte)((data >> 32) & 0xFF);
			tmpArray[4] = (byte)((data >> 24) & 0xFF);
			tmpArray[5] = (byte)((data >> 16) & 0xFF);
			tmpArray[6] = (byte)((data >> 8) & 0xFF);
			tmpArray[7] = (byte)((data >> 0) & 0xFF);
			socket.Send(tmpArray, 0, 8, SocketFlags.None);
		}

		public void write(double data)
		{
			long asLong = BitConverter.DoubleToInt64Bits(data);
			write(asLong);
		}

		public void write(char data)
		{
			tmpCharArray[0] = data;
			byte[] bytes = System.Text.UnicodeEncoding.Unicode.GetBytes(tmpCharArray);
			byte tmp = bytes[0];
			bytes[0] = bytes[1];
			bytes[1] = tmp;
			socket.Send(bytes, 0, bytes.Length, SocketFlags.None);
		}

		public void write(bool data)
		{
			tmpArray[0] = data ? (byte)1 : (byte)0;
			socket.Send(tmpArray, 1, SocketFlags.None);
		}

		public void write(String data)
		{
			if (data != null) 
			{
				byte[] bytes = System.Text.UnicodeEncoding.Unicode.GetBytes(data);
				for (int i = 0; i < (bytes.Length-1); i+=2) 
				{
					byte tmp = bytes[i];
					bytes[i] = bytes[i+1];
					bytes[i+1] = tmp;
				}
				write(bytes.Length/2);
				socket.Send(bytes, 0, bytes.Length, SocketFlags.None);
			} 
			else 
			{
				write("");
			}
		}

		public void write(byte[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				socket.Send(data, 0, data.Length, SocketFlags.None);
			} 
			else 
			{
				write(new byte[] {});
			}
		}

		public void write(short[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new short[] {});
			}
		}

		public void write(int[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new int[] {});
			}
		}

		public void write(float[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new float[] {});
			}
		}

		public void write(long[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new long[] {});
			}
		}

		public void write(double[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new double[] {});
			}
		}

		public void write(char[] data)
		{
			if (data != null) 
			{
				byte[] bytes = System.Text.UnicodeEncoding.Unicode.GetBytes(data);
				for (int i = 0; i < (bytes.Length-1); i+=2) 
				{
					byte tmp = bytes[i];
					bytes[i] = bytes[i+1];
					bytes[i+1] = tmp;
				}
				write(bytes.Length/2);
				socket.Send(bytes, 0, bytes.Length, SocketFlags.None);
			}
			else 
			{
				write(new char[] {});
			}
		}

		public void write(bool[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new bool[] {});
			}
		}

		public void write(String[] data)
		{
			if (data != null) 
			{
				write(data.Length);
				for (int i = 0; i < data.Length; i++) 
				{
					write(data[i]);
				}
			}
			else 
			{
				write(new String[] {});
			}
		}

		public void write(byte[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					byte[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					socket.Send(data[i], 0, data[i].Length, SocketFlags.None);
				}
			} else {
				write(new byte[][] {});
			}
		}

		public void write(short[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					short[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new short[][] {});
			}
		}

		public void write(int[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					int[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new int[][] {});
			}
		}

		public void write(float[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					float[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new float[][] {});
			}
		}

		public void write(long[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					long[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new long[][] {});
			}
		}

		public void write(double[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					double[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new double[][] {});
			}
		}

		public void write(char[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					char[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new char[][] {});
			}
		}

		public void write(bool[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					bool[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new bool[][] {});
			}
		}

		public void write(String[][] data)
		{
			if (data != null) {
				int len = 0;
				for (int i = 0; i < data.Length; i++) {
					String[] sub = data[i];
					if (i == 0) {
						len = sub.Length;
					} else if (sub.Length != len) {
						throw new Exception("Cannot marshall 2D array: 2D arrays must be regular");
					}
				}
				write(data.Length);
				write(len);
				for (int i = 0; i < data.Length; i++) {
					for (int j = 0; j < len; j++) {
						write(data[i][j]);
					}
				}
			} else {
				write(new String[][] {});
			}
		}
	}
}

⌨️ 快捷键说明

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