dataoutputstream乱码?ByteArrayOutputStream编码
- 开发语言
- 2023-08-13
- 82
大家好,今天给各位分享dataoutputstream乱码的一些知识,其中也会对ByteArrayOutputStream编码进行解释,文章篇幅可能偏长,如果能碰巧解决...
大家好,今天给各位分享dataoutputstream乱码的一些知识,其中也会对ByteArrayOutputStream编码进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
Java如何实现自动关闭资源
Java7新增机制——自动关闭资源的try语句
1自动关闭资源介绍
Java7增强了try语句的功能——它允许在try关键字后跟一对圆括号,圆括号可以声明,初始化一个或多个资源,此处的资源指得是那些必须在程序结束时必须关闭的资源(比如数据库连接,网络连接等),try语句在该语句结束时自动关闭这些资源。
为了保证try语句可以正常关闭资源,这些资源实现类必须实现Closeable或AutoCloseable接口,实现这些类就必须实现close方法。
2代码示例
importjava.io.*;
publicclassAutoCloseTest
{
publicstaticvoidmain(String[]args)
throwsIOException
{
try(
//声明、初始化两个可关闭的资源
//try语句会自动关闭这两个资源。
BufferedReaderbr=newBufferedReader(
newFileReader("AutoCloseTest.java"));
PrintStreamps=newPrintStream(new
FileOutputStream("a.txt")))
{
//使用两个资源
System.out.println(br.readLine());
ps.println("庄生晓梦迷蝴蝶");
}
}
}
3运行结果
E:\test\Java\Java8\ExceptionTEST\src>javaAutoCloseTest
importjava.io.*;
文件a.txt中生成
庄生晓梦迷蝴蝶
4结果分析
try后的小括号分别声明,初始化两个IO流,由于BufferedReader,PrintStream都实现了Closeable接口,而且它们放在try语句中声明和初始化,所有try语法会自动关闭它们。因此上面的代码是安全的。
谢谢大家
tcp端口阻塞解决方法
1、前提要有个外网IP,如果没有就给运营商打电话,告诉他你要个外网IP,要不然不能下载。
3、使用下面解决办法的时候,要先关闭系统防火墙(不想关闭,可以在防火墙添加允许程序)。
5、解决办法1:去路由器设置界面,打开upnp。
7、解决办法2:去路由器设置界面,设置端口转发,TCP和UDP,端口22223,指向本机IP。
java里面的节点流和处理流是什么意思a
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
JAVA常用的节点流有以下几个:
文件FileInputStreamFileOutputStreanFileReaderFileWriter文件进行处理的节点流。
字符串StringReaderStringWriter对字符串进行处理的节点流。
数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter对管道进行处理的节点流。
父类InputStreamOutputStreamReaderWriter
常用处理流(关闭处理流使用关闭里面的节点流)
缓冲流:BufferedInputStreanBufferedOutputStreamBufferedReaderBufferedWriter
增加缓冲功能,避免频繁读写硬盘。
转换流:InputStreamReaderOutputStreamReader实现字节流和字符流之间的转换。
数据流DataInputStreamDataOutputStream等-提供将基础数据类型写入到文件中,或者读取出来。
电子邮件导出的excel表格文件名乱码是什么原因
因为经常要用到导出功能,之前因为文件名乱码,所以都用英文或是拼音缩写来代替,今天特意要接觉下这个问题。顺便记录下。望对小白有用。
/**
*导出结算详情列表
*@return
*/
publicvoiddepositLogExport()
{
Stringtitle="押金流水报表";
StringexcelName="押金流水报表.xls";
OutputStreamos=null;
try
{
intshopId=newLong(getShopLoginer().getShop().getId()).intValue();
if(date==null){
date=newDateBean();
}
intcount=service.getCount(shopId,date);
Page<DepositLog>pageResult=newPage<DepositLog>();
if(count>0){
pageResult=service.list(1,count,shopId,date);
}
List<Map<String,Object>>list=newArrayList<Map<String,Object>>();
doubleshopDeposit=getShopLoginer().getShop().getDeposit();
for(DepositLogs:pageResult.getData())
{
Map<String,Object>map=newHashMap<String,Object>();
map.put("id",s.getId());
map.put("depositSn",s.getDepositSn());
map.put("createTime",StringUtils.timestampToString(s.getCreateTime()));
map.put("type",type[s.getType()]);
map.put("amount",s.getAmount());
map.put("depositRest",s.getDepositRest());
map.put("depositGap",shopDeposit-s.getDepositRest());
map.put("userName",s.getUserName());
map.put("remarks",s.getRemarks());
list.add(map);
}
//表格表头
String[]header={"流水号","流水时间","类型","流水金额","押金余额","押金缺口","操作人","备注"};
//对应Map中的key
String[]key={"depositSn","createTime","type",
"amount","depositRest","depositGap","userName","remarks"};
HSSFWorkbookworkbook=null;
HttpServletResponseresponse=ServletActionContext
.getResponse();
workbook=ExportUtil.workPaperExport(list,header,key,
title,true,null,null,null);
os=response.getOutputStream();
response.setHeader("Content-disposition",
"attachment;filename="+toUtf8String(excelName));
response.setContentType("application/msexcel;charset=UTF-8");
workbook.write(os);
os.flush();
}catch(Exceptione){
if(logger.isDebugEnabled())
logger.error(e.getMessage(),e);
e.printStackTrace();
}finally{
try{
if(os!=null)
os.close();
}catch(IOExceptione){
if(logger.isInfoEnabled())
logger.error(e.getMessage(),e);
e.printStackTrace();
}
}
//returnnull;
}
//文件名乱码处理
publicstaticStringtoUtf8String(Strings){
StringBuffersb=newStringBuffer();
for(inti=0;i<s.length();i++){
charc=s.charAt(i);
if(c>=0&&c<=255){sb.append(c);}
else{
byte[]b;
try{b=Character.toString(c).getBytes("utf-8");}
catch(Exceptionex){
System.out.println(ex);
b=newbyte[0];
}
for(intj=0;j<b.length;j++){
intk=b[j];
if(k<0)k+=256;
sb.append("%"+Integer.toHexString(k).toUpperCase());
}
}
}
returnsb.toString();
}
Java面试题目网站有哪些
面试题你可以关注头条号“互联网IT技术”,里边就有面试题讲解,并有答案。其中不乏名企的面试题目。
同时,这里每天都会发布技术文章,不但让自己知道如何做面试题,还真正了解技术,在最终的一对一的面试中,也能有帮助,下边列举其中一部分文章,不如:
京东和腾讯精选12道Java笔试题并有答案
Java:重入锁ReentranLock详解、代码实战、与Synchronized对比
Java:XML基本语法、DOM、SAX、JDOM、DOM4J综合对比和代码实战
Java网络编程:TCP和UDP通信模型详解及基于代码实战的通信编程
Java并发编程:基于代码实战的4种线程池和缓冲队列BlockingQueue
欢迎大家关注头条号“互联网IT技术”,这个头条号每天都发布技术文章,包括Java、大数据、前端、Android、IOS等方向,还不定期发布相关的技术面试题讲解,鼓励大家发散式讨论,互相帮助和成长。byte[]数组如何转换成fileInputStream
如果必须要用FileOutputStream的话那是没有办法的,因为FileOutputStream是属于比较底层的流,所有的构造方法都与文件关联。
但是如果要写入blob中的话使用FileOutputStream却是有点儿多余的,因为像你那样写入文件读出来之后同样还是byte数组,所以可以直接使用OutputStream的write(byte[]b,intoff,intlen)方法,OFF开始标记一般设为0,len偏移量一般设为byte的length大小
如果你还想了解更多这方面的信息,记得收藏关注本站。
本文链接:http://xinin56.com/kaifa/6067.html