我有一个Java类,其中有一些代码要根据标志值进行操作,下面是我的代码,它的作用是标记值为1
if(flag==1)
{
Log.d("Flag value", "flag= "+flag);
System.out.println("Read have "+read());
String tt=read();
s1=tt;
}
从上面这个函数中,变量“s1”中的值是read()函数返回的一些字符串值。
此代码的输出返回read()函数的两倍,如
s1有“StringString”
这是我的阅读功能代码
public String read(){
try{
FileInputStream fin = openFileInput(file);
int c;
while( (c = fin.read()) != -1)
{
temp = temp + Character.toString((char)c);
}
}
catch(Exception e)
{
}
Log.d("INSIDE READ FUNC", "temp have "+temp);
return temp;
}
虽然我省略了这个“System.out.println(”Read have“+ read());”通过以下代码
if(flag==1)
{
Log.d("Flag value", "flag= "+flag);
//System.out.println("Read have "+read());
String tt=read();
s1=tt;
}
我得到了完美的输出,如
s1有“String”
为什么代码会像这样工作?我只调用了read()函数一次来存储到“tt”变量。
将tt变量存储到s1变量。
但是当我使用System.out.println(“Read have”+ read())时;它调用并存储返回的字符串值在数组中,第二次我存储到“tt”字符串变量,并将最后返回的字符串从read()函数追加到“tt”字符串变量。
所以“tt”字符串变量有两次read()函数返回String。 它是如何存储两次的?
答案 0 :(得分:3)
temp = temp + Character.toString((char)c);
您没有在read()方法中定义temp,因此它可能被定义为全局变量。这意味着每次调用read()方法时,都会向其追加新值。 您应该在read()方法中定义temp:
String temp;
应该修复它。
答案 1 :(得分:2)
if(flag==1)
{
Log.d("Flag value", "flag= "+flag);
//System.out.println("Read have "+read());
String tt=read();
s1=tt;
}
上面的代码read()
方法中的是两次调用。并且在read()
方法变量“temp”中声明为全局,并且您将连接数据,如
temp = temp + Character.toString((char)c);
因此值在temp变量中连续两次。
要解决问题,请将temp声明为本地变量,如
public String read(){
String temp="";
try{
FileInputStream fin = openFileInput(file);
int c;
while( (c = fin.read()) != -1)
{
temp = temp + Character.toString((char)c);
}
}
catch(Exception e)
{
}
Log.d("INSIDE READ FUNC", "temp have "+temp);
return temp;
}
答案 2 :(得分:0)
InputStream is = Context.openFileInput(someFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((int bytesRead = is.read(b)) != -1) {
bos.write(b, 0, bytesRead);
}
byte[] bytes = bos.toByteArray();