/*******************************************************************************
 * Copyright (c) 2002, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM - Initial API and implementation
 *******************************************************************************/
package org.eclipse.core.internal.resources.refresh.win32;

import java.io.*;

/**
 * Performs character to byte conversion for passing strings to native win32
 * methods.
 */
public class Convert {

	/*
	 * Obtains the default encoding on this platform
	 */
	private static String defaultEncoding=
		new InputStreamReader(new ByteArrayInputStream(new byte[0])).getEncoding();

	/**
	 * Converts the given String to bytes using the platforms default
	 * encoding.
	 *
	 * @param target	The String to be converted, can not be <code>null</code>.
	 * @return byte[]	The resulting bytes, or <code>null</code>.
	 */
	/**
	 * Calling String.getBytes() creates a new encoding object and other garbage.
	 * This can be avoided by calling String.getBytes(String encoding) instead.
	 */
	public static byte[] toPlatformBytes(String target) {
		if (defaultEncoding == null)
			return target.getBytes();
		// try to use the default encoding
		try {
			return target.getBytes(defaultEncoding);
		} catch (UnsupportedEncodingException e) {
			// null the default encoding so we don't try it again
			defaultEncoding = null;
			return target.getBytes();
		}
	}
}
