今天主要是完成了地图服务器的架设。前期的解析google地图的编码的代码已经是有的,现在就把一些遇到的问题写出来。
1.Java的Socket连接后的数据传输,因为一开始用的inputstream.readutf(),所以导致在和C的联调中出现了问题,后来改成了readline()暂时解决了问题,但总觉得不是很好,尝试了read(byte[])的方法。
2.Java中的绘制图片,就是在后台建立一个BufferImage,然后creategraphics(),然后进行绘图,基本上也就这样了。
绘图代码如下:
/**
* @param _mapnames是9张地图的名字
* @return 成功是File文件 | 失败则是null
*/
private File drawMap(String[][] _mapdata) {
File[][] mapfiles = new File[3][3];
File Map = new File("Map.png");
Image[][] mapImages = new Image[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
mapfiles[i][j] = new File(_mapdata[i][j]);
}
}
BufferedImage mapBufferedImage = new BufferedImage(SettingData.MAP_WIDTH, SettingData.MAP_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics mapGraphics = mapBufferedImage.createGraphics();
try {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
mapImages[i][j] = ImageIO.read(mapfiles[i][j]);
}
}
Image car = ImageIO.read(new File(SettingData.Car_PIC));
//-----------------------------------------------
//区分开是为了要么一次画完,要么不画
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
mapGraphics.drawImage(mapImages[i][j], 256 * i, 256 * j, null);
}
}
mapGraphics.drawImage(car, Integer.valueOf(_mapdata[3][0]), Integer.valueOf(_mapdata[3][1]), null);
mapGraphics.dispose();
//Map.createNewFile();
ImageIO.write(mapBufferedImage, "PNG", Map);
} catch (Exception e) {
Map = null;
e.printStackTrace();
}
return Map;
}
毕竟是张简单的图片。传递的方法还是socket连接标准的多线程。
3.对文件的写入和读取,写入的上面代码提到了:ImageIO.write();的方法。
读取的则是用的inputstream.read();发送则使用流发送。详细代码如下:
/**
* @param _map是地图的文件
* @param _socket是发送目标的端口
* @return 表明是否发送成功
*/
private boolean sendMap(File _map, Socket _socket) {
try {
OutputStream outputStream = _socket.getOutputStream();
byte[] MapFileByte = new byte[60000];
int amount;
int sum = 0;
RandomAccessFile sendMapFile = new RandomAccessFile(_map, "r");
while ((amount = sendMapFile.read(MapFileByte)) != -1) {
outputStream.write(MapFileByte, 0, amount);
sum += amount;
System.out.println("已发送" + sum +"字节!");
}
outputStream.flush();
System.out.println("清空缓冲区!");
outputStream.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
目前的一个问题就是对方不知道我已经发送结束,不会主动断开,然后必须得我这断开outputstream,所以比较郁闷。
完整代码,其实也没什么。。。。