Package org.optaplanner.persistence.common.api.domain.solution

## Interface SolutionFileIO<Solution_>

- Type Parameters:
    `Solution_` - the solution type, the class with the `PlanningSolution` annotation
  All Known Implementing Classes:
    `JacksonSolutionFileIO`, `JaxbSolutionFileIO`, `XStreamSolutionFileIO`

      public interface SolutionFileIO<Solution_>

  Reads or writes a `PlanningSolution` from or to a `File`.

  An implementation must be thread-safe.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `String` | `getInputFileExtension()` | Every `PlanningSolution` type potentially has its own file extension.
    `default String` | `getOutputFileExtension()` | It's highly recommended that this method returns the same value as `getInputFileExtension()`, which it does by default unless it's overridden, because a good output file is able to function as an input file.
    `Solution_` | `read​(File inputSolutionFile)` | This method is thread-safe.
    `void` | `write​(Solution_ solution, File outputSolutionFile)` | This method is thread-safe.

- - ### Method Detail

    - #### getInputFileExtension

          String getInputFileExtension()

      Every `PlanningSolution` type potentially has its own file extension. If no specific file extension is defined by the use case, the following are recommended:
      - If this `SolutionFileIO` implementation serializes to XML, use file extension "xml".
      - If this `SolutionFileIO` implementation serializes to text, use file extension "txt".
      - If this `SolutionFileIO` implementation serializes to binary, use file extension "dat".

      It's good practice that both the input and the output file have the same file extension, because a good output file is able to function as an input file. Therefore `getOutputFileExtension()` defaults to returning the same as this method.

      The file extension does not include the dot that separates it from the base name.

      This method is thread-safe.

      Returns:
        never null, for example "xml"

    - #### getOutputFileExtension

          default String getOutputFileExtension()

      It's highly recommended that this method returns the same value as `getInputFileExtension()`, which it does by default unless it's overridden, because a good output file is able to function as an input file.
      Returns:
        never null, for example "xml"
      See Also:
        `getInputFileExtension()`

    - #### read

          Solution_ read​(File inputSolutionFile)

      This method is thread-safe.
      Parameters:
        `inputSolutionFile` - never null
      Returns:
        never null

    - #### write

          void write​(Solution_ solution,
                     File outputSolutionFile)

      This method is thread-safe.
      Parameters:
        `solution` - never null
        `outputSolutionFile` - never null, parent directory already exists