﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-皮杜妮-随笔分类-Java</title><link>http://blogjava.net/fanjs2000/category/50500.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 10 Jul 2016 07:15:53 GMT</lastBuildDate><pubDate>Sun, 10 Jul 2016 07:15:53 GMT</pubDate><ttl>60</ttl><item><title>AntiSamy防止xss攻击</title><link>http://www.blogjava.net/fanjs2000/archive/2016/07/08/431129.html</link><dc:creator>猪眼睛</dc:creator><author>猪眼睛</author><pubDate>Fri, 08 Jul 2016 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/fanjs2000/archive/2016/07/08/431129.html</guid><description><![CDATA[<div><h1>可以使用AntiSamy防范XSS跨站脚本攻击</h1><h1><br /></h1><h1><br /></h1><h1>常用XSS方式分为以下几种：</h1> <p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入框中直接输入恶意脚本，如：</p> <p>&gt;&lt;script&gt;alert(document.cookie)&lt;/script&gt;</p> <p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入框中输入html标签，在标签中嵌入恶意脚本，如src，href，css style等。</p> <p>&lt;IMG SRC="javascript：alert('XSS');"&gt;;  &lt;BODY BACKGROUND="javascript：alert('XSS')"&gt;  &lt;STYLE&gt;li {list-style-image:url("javascript：alert('XSS')");}&lt;/STYLE&gt;&lt;UL&gt;&lt;LI&gt;XSS&lt;/br&gt; </p><p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将恶意脚本注入在event事件中，如onClick，onBlur，onMouseOver等事件。</p> <p>&lt;a onmouseover="alert(document.cookie)"&gt;xxslink&lt;/a&gt;</p> <p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在remote style sheet，javascript中，如</p> <pre>&lt;LINK REL="stylesheet"HREF="javascript：alert('XSS');"&gt;</pre></div><img src ="http://www.blogjava.net/fanjs2000/aggbug/431129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanjs2000/" target="_blank">猪眼睛</a> 2016-07-08 11:44 <a href="http://www.blogjava.net/fanjs2000/archive/2016/07/08/431129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高用户下记录系统</title><link>http://www.blogjava.net/fanjs2000/archive/2013/11/23/406708.html</link><dc:creator>猪眼睛</dc:creator><author>猪眼睛</author><pubDate>Sat, 23 Nov 2013 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/fanjs2000/archive/2013/11/23/406708.html</guid><description><![CDATA[电商系统需要记录用户行为，需要一个高并发高速写入文件，考虑利用缓存和noi机制写入数据，具体逻辑是2块缓存区，一块写数据，一块写文件，交替进行，并且利用noi机制一次写入数据。<br /><br />测试结果： 1亿条数据用时93秒，生产58个100m文件。每一条953纳秒。<br /><br /><div>package io.netty.example.http.snoop;<br /><br />import java.io.FileOutputStream;<br />import java.io.RandomAccessFile;<br />import java.nio.ByteBuffer;<br />import java.nio.CharBuffer;<br />import java.nio.MappedByteBuffer;<br />import java.nio.channels.FileChannel;<br />import java.nio.charset.Charset;<br />import java.nio.charset.CharsetDecoder;<br />import java.nio.charset.CharsetEncoder;<br />import java.text.ParseException;<br />import java.text.SimpleDateFormat;<br />import java.util.Date;<br /><br />public class WriterFile {<br /><br /><br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 指定大小为 1024 的缓冲区<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static ByteBuffer bytebufferone = ByteBuffer.allocate(102400000);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static ByteBuffer bytebuffertwo = ByteBuffer.allocate(102400000);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static boolean checkbuffer =true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; long start = System.nanoTime(); &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for(int i=0;i&lt;100000000;i++){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(checkbuffer)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;processone("123abc"+i+"\r\n");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;prcesstwo("123abc"+i+"\r\n");&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;long end = System.nanoTime(); &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println((end - start)+"耗时"); &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * bytebuffertwo写日志<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static void prcesstwo(String log)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//写bytebuff<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean onecheck=checkposition(log,bytebuffertwo);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(onecheck)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;writerbuffer(log,bytebuffertwo);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//写文件<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;checkbuffer=true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;writerbuffer(log,bytebufferone);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;writerfile(bytebuffertwo);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * bytebufferone写日志<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @param log<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static&nbsp; void&nbsp; processone(String log)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//写bytebuff<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean onecheck=checkposition(log,bytebufferone);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(onecheck){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;writerbuffer(log,bytebufferone);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//写文件<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;checkbuffer=false;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;writerbuffer(log,bytebuffertwo);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;writerfile(bytebufferone);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * 判断缓存是否可以写下日志<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @param log<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @return<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static&nbsp; boolean checkposition(String log,ByteBuffer bytebuffer)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br /><br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(2*log.getBytes().length&gt;bytebuffer.limit()-bytebuffer.position())<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return true;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 写日志到缓存，并且返回缓存指针位置<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param log <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static&nbsp;&nbsp; int&nbsp; writerbuffer(String log,ByteBuffer bytebuffer )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int i = 0; i &lt; log.length(); i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bytebuffer.putChar(log.charAt(i));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return bytebuffer.position();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * 写文件<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @param filename<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static&nbsp; void&nbsp; writerfile(ByteBuffer bytebuffer)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FileOutputStream fos = new FileOutputStream(Datefile());<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FileChannel fc = fos.getChannel();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bytebuffer.flip();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fc.write(bytebufferone);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fc.close();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fos.close();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bytebuffer.clear();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;catch(Exception ex)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ex.printStackTrace();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/**<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * 文件名按日期生产<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @param str<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @return<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public static String Datefile() {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String str = format.format(new Date());<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "d:/test/"+str+".txt";<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} <br />}<br /><br /><br />附带一个普通的nio读写<br /><div>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; public static&nbsp; void test()<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FileOutputStream fos = new FileOutputStream("d:/nio.txt");<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 得到文件通道<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FileChannel fc = fos.getChannel();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 指定大小为 1024 的缓冲区<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ByteBuffer bf = ByteBuffer.allocate(1024);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 要写入文件的字符串<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String greeting = "Hello111";<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 把以上字符串逐字放入缓冲区<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (int i = 0; i &lt; greeting.length(); i++) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bf.putChar(greeting.charAt(i));<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 记得执行这个方法，使得 position=0, limit=30, 才能写入正确的数据<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 否则 position 为 30, limit 为 1024，将会把 30 之后的全部空数据(0) 填到文件中<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(greeting.getBytes().length);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(bf.position());<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(bf.limit());<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bf.flip();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 缓冲区数据写入到文件中，会把缓冲区中从 position 到 limit 之间的数据写入文件<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fc.write(bf);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fc.close(); // 关闭文件通道<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fos.close(); // 关闭文件输出流<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}catch(Exception e){<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; e.printStackTrace();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}</div></div><img src ="http://www.blogjava.net/fanjs2000/aggbug/406708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanjs2000/" target="_blank">猪眼睛</a> 2013-11-23 11:16 <a href="http://www.blogjava.net/fanjs2000/archive/2013/11/23/406708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>