2 bonanjun bonanjun 于 2015.05.28 15:57 提问

在map转byte流上遇到报错,求救

我在将map转成文件流的时候遇到报错

ByteArrayOutputStream mem_out = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(mem_out);

        out.writeObject(hashMap);

        out.close();
        mem_out.close();

        byte[] bytes = mem_out.toByteArray();//这里会报错
        return bytes;

似乎是内存溢出
我这个map键不多,但值很多,是解析一张图片的.
本人初学者,求老码们帮帮忙

3个回答

wgw335363240
wgw335363240   2015.05.28 16:31

你把异常贴出来看看,是不是map中存储的内容有些没有序列化造成的。你这个是序列化的操作吧。

danielinbiti
danielinbiti   Ds   Rxr 2015.05.28 17:47

如果是
byte[] bytes = mem_out.toByteArray();//这里会报错
这种错误可以增大内存空间,增大堆的内存,配置-Xms 和-Xmx这两个内存参数。

ByteArrayOutputStream字节数不能太大,最大是int的最大值。

bonanjun
bonanjun   2015.05.29 15:26
                                for (int i = 0; i < cbw; i++) {
                                        for (int j = 0; j < cbh; j++) {//循环整张图片//1024*768

                                            int pixel = bt.getPixel(i, j);   //获得该点颜色
                                            List<int[]> points = hashMap.get(pixel);  //判断该键值是否存在

                                            if (null == points) {
                                                points = new ArrayList<int[]>();
                                                hashMap.put(pixel, points);
                                            }
                                            points.add(new int[] { i, j });
                                        }
                                    }

然后就是调用前面的代码了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!