请教各位大虾
如何将一个对象转化成字节数组,然后再将这个字节数组还原成这个对象。好象用toString().getBytes()不对。
或者如何用UDP传输一个对象。构造DataGramPacket()的时候需要字节长度,怎么才能传一个对象啊,UDP又不能用ObjectOut/InputStream
如何将一个对象转化成字节数组,然后再将这个字节数组还原成这个对象。好象用toString().getBytes()不对。
或者如何用UDP传输一个对象。构造DataGramPacket()的时候需要字节长度,怎么才能传一个对象啊,UDP又不能用ObjectOut/InputStream
解决方案 »
- float f=1.3; double d=1.4f;
- java 发送短息
- 表达能力比较差啊,回复了将近200个帖子啊。没有一个人明白我的意思的啊。我重新又整理了一下,同时感谢大家前面的参与啊。真心谢谢大家啊!
- 怎样得到JFileChooser目录路径和文件名
- 请教java中使用正则表达式转换格式的问题
- 如何把从数据库中读取到的数据放到JTable中显示啊
- 高手大会诊,新人在这里拜了
- java打印功能(熟悉java打印的请帮个忙)
- 外行问一下:JAVA类库和MFC及VCL一样也开放源码么??
- 在IE里浏览用CORBA连接数据库的Applet时出现如下错误:java.lang.ClassNotFoundException:org.mag.PortableServer.Servant,该如何解决?
- java初学
- 关于用户是否在线的处理,大家来讨论.
/**
@version 1.01 2004-08-25
@author Cay Horstmann
*/import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;
import java.util.*;
import javax.swing.*;/**
This program demonstrates the transfer of object references within the same virtual machine.
*/
public class LocalTransferTest
{
public static void main(String[] args)
{
JFrame frame = new LocalTransferFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}/**
This frame contains a panel to edit a cubic curve, a
panel that can display an arbitrary shape, and copy and
paste buttons.
*/
class LocalTransferFrame extends JFrame
{
public LocalTransferFrame()
{
setTitle("LocalTransferTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); curvePanel = new CubicCurvePanel();
curvePanel.setPreferredSize(new Dimension(DEFAULT_WIDTH / 2, DEFAULT_HEIGHT));
shapePanel = new ShapePanel(); add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, curvePanel, shapePanel),
BorderLayout.CENTER);
JPanel panel = new JPanel(); JButton copyButton = new JButton("Copy");
panel.add(copyButton);
copyButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
copy();
}
}); JButton pasteButton = new JButton("Paste");
panel.add(pasteButton);
pasteButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
paste();
}
}); add(panel, BorderLayout.SOUTH);
} /**
Copies the current cubic curve to the local clipboard.
*/
private void copy()
{
LocalSelection selection = new LocalSelection(curvePanel.getShape());
clipboard.setContents(selection, null);
} /**
Pastes the shape from the local clipboard into the
shape panel.
*/
private void paste()
{
try
{
DataFlavor flavor
= new DataFlavor("application/x-java-jvm-local-objectref;class=java.awt.Shape");
if (clipboard.isDataFlavorAvailable(flavor))
shapePanel.setShape((Shape) clipboard.getData(flavor));
}
catch (ClassNotFoundException e)
{
JOptionPane.showMessageDialog(this, e);
}
catch (UnsupportedFlavorException e)
{
JOptionPane.showMessageDialog(this, e);
}
catch (IOException e)
{
JOptionPane.showMessageDialog(this, e);
}
} private CubicCurvePanel curvePanel;
private ShapePanel shapePanel;
private Clipboard clipboard = new Clipboard("local"); private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 300;
}
/**
This panel draws a shape and allows the user to
move the points that define it.
*/
class CubicCurvePanel extends JPanel
{
public CubicCurvePanel()
{
addMouseListener(new
MouseAdapter()
{
public void mousePressed(MouseEvent event)
{
for (int i = 0; i < p.length; i++)
{
double x = p[i].getX() - SIZE / 2;
double y = p[i].getY() - SIZE / 2;
Rectangle2D r = new Rectangle2D.Double(x, y, SIZE, SIZE);
if (r.contains(event.getPoint()))
{
current = i;
return;
}
}
} public void mouseReleased(MouseEvent event)
{
current = -1;
}
}); addMouseMotionListener(new
MouseMotionAdapter()
{
public void mouseDragged(MouseEvent event)
{
if (current == -1) return;
p[current] = event.getPoint();
repaint();
}
}); current = -1;
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for (int i = 0; i < p.length; i++)
{
double x = p[i].getX() - SIZE / 2;
double y = p[i].getY() - SIZE / 2;
g2.fill(new Rectangle2D.Double(x, y, SIZE, SIZE));
} g2.draw(getShape());
} /**
Gets the current cubic curve.
@return the curve shape
*/
public Shape getShape()
{
return new CubicCurve2D.Double(p[0].getX(), p[0].getY(), p[1].getX(), p[1].getY(),
p[2].getX(), p[2].getY(), p[3].getX(), p[3].getY());
} private Point2D[] p =
{
new Point2D.Double(10, 10),
new Point2D.Double(10, 100),
new Point2D.Double(100, 10),
new Point2D.Double(100, 200)
};
private static int SIZE = 10;
private int current;
}/**
This panel displays an arbitrary shape.
*/
class ShapePanel extends JPanel
{
/**
Set the shape to be displayed in this panel.
@param aShape any shape
*/
public void setShape(Shape aShape)
{
shape = aShape;
repaint();
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if (shape != null) g2.draw(shape);
} private Shape shape;
}/**
This class is a wrapper for the data transfer of
object references that are transferred within the same
virtual machine.
*/
class LocalSelection implements Transferable
{
/**
Constructs the selection.
@param o any object
*/
LocalSelection(Object o)
{
obj = o;
} public DataFlavor[] getTransferDataFlavors()
{
DataFlavor[] flavors = new DataFlavor[1];
Class type = obj.getClass();
String mimeType = "application/x-java-jvm-local-objectref;class=" + type.getName();
try
{
flavors[0] = new DataFlavor(mimeType);
return flavors;
}
catch (ClassNotFoundException e)
{
return new DataFlavor[0];
}
} public boolean isDataFlavorSupported(DataFlavor flavor)
{
return "application".equals(flavor.getPrimaryType())
&& "x-java-jvm-local-objectref".equals(flavor.getSubType())
&& flavor.getRepresentationClass().isAssignableFrom(obj.getClass());
} public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException
{
if (! isDataFlavorSupported(flavor))
throw new UnsupportedFlavorException(flavor); return obj;
}
private Object obj;
}