1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 */ 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one or more 6 * contributor license agreements. See the NOTICE file distributed with 7 * this work for additional information regarding copyright ownership. 8 * The ASF licenses this file to You under the Apache License, Version 2.0 9 * (the "License"); you may not use this file except in compliance with 10 * the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 package com.sun.org.apache.xalan.internal.xsltc.runtime.output; 22 23 import java.io.BufferedWriter; 24 import java.io.IOException; 25 import java.io.Writer; 26 import jdk.xml.internal.SecuritySupport; 27 28 /** 29 * @author Santiago Pericas-Geertsen 30 * @LastModified: Sep 2017 31 */ 32 class WriterOutputBuffer implements OutputBuffer { 33 private static final int KB = 1024; 34 private static int BUFFER_SIZE = 4 * KB; 35 36 static { 37 // Set a larger buffer size for Solaris 38 final String osName = SecuritySupport.getSystemProperty("os.name"); 39 if (osName.equalsIgnoreCase("solaris")) { 40 BUFFER_SIZE = 32 * KB; 41 } 42 } 43 44 private Writer _writer; 45 46 /** 47 * Initializes a WriterOutputBuffer by creating an instance of a 48 * BufferedWriter. The size of the buffer in this writer may have 49 * a significant impact on throughput. Solaris prefers a larger 50 * buffer, while Linux works better with a smaller one. 51 */ 52 public WriterOutputBuffer(Writer writer) { 53 _writer = new BufferedWriter(writer, BUFFER_SIZE); 54 } 55 56 public String close() { 57 try { 58 _writer.flush(); 59 } 60 catch (IOException e) { 61 throw new RuntimeException(e.toString()); 62 } 63 return ""; 64 } 65 66 public OutputBuffer append(String s) { 67 try { 68 _writer.write(s); 69 } 70 catch (IOException e) { 71 throw new RuntimeException(e.toString()); 72 } 73 return this; 74 } 75 76 public OutputBuffer append(char[] s, int from, int to) { 77 try { 78 _writer.write(s, from, to); 79 } 80 catch (IOException e) { 81 throw new RuntimeException(e.toString()); 82 } 83 return this; 84 } 85 86 public OutputBuffer append(char ch) { 87 try { 88 _writer.write(ch); 89 } 90 catch (IOException e) { 91 throw new RuntimeException(e.toString()); 92 } 93 return this; 94 } 95 }