A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

希望大家给予我帮助 ,我是新手。。。同时也希望大家给我说一下BufferedWriter中的newLine方法的底层实现方式。
最好是用代码的形式。谢谢

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
使用 newLine() 表示换行的意思  具有跨平台性
我把它执行的底层代码给你看吧
调用newLine()方法
public void newLine() throws IOException {
        write(lineSeparator);
    }

其中:
lineSeparator = java.security.AccessController.doPrivileged(
            new sun.security.action.GetPropertyAction("line.separator"));


评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 haixian 于 2014-3-28 17:11 编辑

String readLine(boolean ignoreLF) throws IOException {
        StringBuffer s = null;
        int startChar;

        synchronized (lock) {
            ensureOpen();//判断输入流是否为空
            boolean omitLF = ignoreLF || skipLF;

        bufferLoop:
            for (;;) {

                if (nextChar >= nChars)
                    fill();//当前缓冲已经读完,填充缓冲
                if (nextChar >= nChars) { /* EOF *///读到类文件末尾
                    if (s != null && s.length() > 0)
                        return s.toString();
                    else
                        return null;
                }
                boolean eol = false;
                char c = 0;
                int i;

                /* Skip a leftover '\n', if necessary */
                if (omitLF && (cb[nextChar] == '\n'))
                    nextChar++;
                skipLF = false;
                omitLF = false;

            charLoop:
                for (i = nextChar; i < nChars; i++) {//从缓冲中每次取一行
                    c = cb;
                    if ((c == '\n') || (c == '\r')) {
                        eol = true;
                        break charLoop;//读到类一行的末尾
                    }
                }

                startChar = nextChar;
                nextChar = i;

                if (eol) {
                    String str;
                    if (s == null) {
                        str = new String(cb, startChar, i - startChar);
                    } else {
                        s.append(cb, startChar, i - startChar);
                        str = s.toString();
                    }//生成返回的字符串
                    nextChar++;
                    if (c == '\r') {
                        skipLF = true;
                    }
                    return str;
                }

                if (s == null)
                    s = new StringBuffer(defaultExpectedLineLength);
                s.append(cb, startChar, i - startChar);
            }
        }
    }
我把我知道的写上去了,他就是先把数据读到一个缓冲数组,然后每次从数组中取一行出来。。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
public void newLine()
       throws IOException写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符。
抛出: IOException - 如果发生 I/O 错误

import java.io.*;
public class TestArray
{
    public static void main(String[] args)
    {
        try
        {
            // Create a new instance of a BufferedWriter object using
            // a StringWriter.
            StringWriter stringWriter = new StringWriter();
            BufferedWriter bufWriter = new BufferedWriter(stringWriter);
            // Write to the underlying StringWriter.
            String s = "This is the string being written.";
            // Print out the first 12 characters.
            bufWriter.write(s, 0, 12);
            // Print a newline character.
            bufWriter.newLine();
            // Print the rest of the string.
            bufWriter.write(s, 12, s.length() - 12);
            bufWriter.flush();
            System.out.println(stringWriter.getBuffer());
            // Close the BufferedWriter object and the underlying
            // StringWriter object.
            stringWriter.close();
            bufWriter.close();
        }
        catch (IOException ex)
        {
            System.out.println(ex.toString());
        }
    }
}
/*
Output:
This is the
string being written.
*/

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
其实它也是一个字符一个字符读的,它读一个便把字符存储到一个容器中,直到读到换行符为止
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马