我将使用什么语法来获取表示字符串的字节数,并将它们与表示ArrayList
保存该字符串的字节数进行比较,例如?
我正在使用多代理代理系统通过消息发送对象,我想跟踪每条消息占用多少空间.只要该方法与对象的实际大小成比例地缩放,该方法就不必是准确的.例如,长度为4的字符串向量将报告为小于长度为5的字符串向量.
Viv*_*ath 25
您可以使用ObjectOutputStream
和将对象转换为字节数组ByteArrayOutputStream
:
public static int sizeof(Object obj) throws IOException {
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
objectOutputStream.writeObject(obj);
objectOutputStream.flush();
objectOutputStream.close();
return byteOutputStream.toByteArray().length;
}
Run Code Online (Sandbox Code Playgroud)
我刚测试了这个.你想要计算的大小的对象需要实现Serializable
(这意味着你可能必须将每个对象标记为仅仅为了获得它的大小.可能不可取).我写了一个快速而又脏的程序来测试它:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Sizeof {
public static class Person implements Serializable {
private String name;
private String age;
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
public static void main(String[] args) {
Person p1 = new Person("Alby", "20");
Person p2 = new Person("VeryLongName", "100");
String s1 = "This is it";
String s2 = "This";
try {
System.out.println("p1 " + sizeof(p1));
System.out.println("p2 " + sizeof(p2));
System.out.println("s1 " + sizeof(s1));
System.out.println("s2 " + sizeof(s2));
}
catch(Exception e) {
e.printStackTrace();
}
}
public static int sizeof(Object obj) throws IOException {
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
objectOutputStream.writeObject(obj);
objectOutputStream.flush();
objectOutputStream.close();
return byteOutputStream.toByteArray().length;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个给了我:
p1 85
p2 94
s1 17
s2 11
Run Code Online (Sandbox Code Playgroud)
编辑
Stephen C的回答强调了这种方法的一些注意事项.
归档时间: |
|
查看次数: |
16781 次 |
最近记录: |