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 + -
显示快捷键?